PHP笔记之常量和数据类型(1)

注意该笔记只记录部分:

目录

常量

常量的定义:

常量的使用——取值:

常量变量的区别

判断常量是否存在

使用一个未定义的常量:

预定义常量

魔术常量

数据类型

总体划分

基本类型(标量类型):

复合类型:

特殊类型

整数类型

进制转换问题

进制转换的系统函数——必须会用

进制转换的人工计算——了解其原理


常量

常量是相对于变量来说的:是一个其中存储的数据不会也不应该改变的“标识符”。

常量的使用,就2个方面:定义,取值。

常量的定义:

常量的使用——取值:

也有两种形式:直接使用名字,或通过constant()函数取得其值;

常量变量的区别

定义形式不同:

使用形式不同:常量无需$符号

可变程度不同:常量的值不可以改变,常量也不可以销毁

作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)

可用类型不同:常量只能存储标量类型(整数,浮点数,字符串,布尔)

判断常量是否存在

使用defined()函数:

如果存在:返回结果是true,

如果不存在:返回结果是false

使用一个未定义的常量:

先看2个对比代码:

echo  “v1的值为”  .  $v1; //注意,该变量v1未定义过

echo  “C1的值为”  .  C1; //注意,该常量C1未定义过

注意:在php中,当使用一个未定义的常量的时候,系统会直接将该常量当做“有值”的常量去使用,并且其值就是该常量名——虽然也会报错!

 

预定义常量

就是系统中预先定义好的一些常量,大约有几百个,我们只要知道几个就行:

M_PI: 就是圆周率的常量值;

PHP_OS: 就是php运行所在的操作系统

PHP_VERSION:就是php的版本号

PHP_INT_MAX: php中的最大的整数值

......更多可参考:php手册>附录>保留字列表>预定义常量

魔术常量

其实只是常量的形式,但没有常量的“恒常”的含义:其值其实会变化的,只有很少的几个:

__FILE__ :代表当前网页文件的完整物理路径

__DIR__ :代表当前网页文件所在的文件夹

__LINE__ :代表当前这个常量名所在的”行号”

数据类型

总体划分

有8种数据类型:

基本类型(标量类型):

整数类型: int, integer

浮点数类型: float,double, real

字符串类型: string

布尔类型: bool,  boolean 这种类型,只有2个数据:true,false

复合类型:

数组: array

对象: object

特殊类型

空类型: null 这种类型中,只有一个数据,那就是null

资源类型: resource

 

整数类型

整数类型的4种写法:

$n1 = 123; //10进制数字写法

$n2 = 0123; //8进制数字写法,实际n2中存储的数字比123小

$n3 = 0x123; //16进制数字写法,实际n3中存储的数字比123大

$n4 = 0b1010; //2进制数字写法(目前不学)

进制转换问题

首先记住这几个单词:

bin:2进制

oct:8进制

dec:10进制

hex:16进制

进制转换主要分2种情况:

1,10进制转换为其他3种进制:decbin(), decoct(), dechex();

2,其他3种进制,转换为10进制:

 

进制转换的系统函数——必须会用

进制转换主要分2种情况:

1,10进制转换为其他3中进制:----特别注意括号里的是数字

decbin(一个10进制数字): 结果返回的是该数字的2进制数字形式的字符串!!!

decoct(一个10进制数字): 结果返回的是该数字的8进制数字形式的字符串!!!

dechex(一个10进制数字): 结果返回的是该数字的16进制数字形式的字符串!!!

2,其他3种进制,转换为10进制:---特别注意括号里的为字符串

bindec(一个2进制数字字符串): 结果返回的是该2进制数字字符串对应的10进制数字!!!

octdec(一个8进制数字字符串): 结果返回的是该8进制数字字符串对应的10进制数字!!!

hexdec(一个16进制数字字符串): 结果返回的是该16进制数字字符串对应的10进制数字!!!

对于输入的字符串中的字符,如果不是对应进制的数字,会被忽略。

那么,有没有这个转换呢?hexbin()???? ——没有!

一个思考题:

将8进制字符串”12345”,转换为2进制结果,怎么做?(通过10进制中转来解决)

$v1 = octdec(“12345”); //此时,v1是10进制数字

$result = decbin( $v1 ); //此时,就是结果:为2进制数字字符串!

 

补充进制基础知识:

一个课后题:

$v1 = 0x123; //它的实际大小其实是:291

$result = octdec( $v1 ); //结果为:17,怎么理解?推理如下:

1,octdec( $v1 )

2,octdec(291)   //因为$v1的实际值就是291

3,octdec(“291”); //因为octdec()函数要求输入一个字符串,这属于自动转换

4,octdec(“21”); //因为octdec()函数要求输入一个8进制数字字符串,而9不是合法的数字,忽略掉

5,结果,8进制数字”21”转换为10进制就是就是17;

进制转换的人工计算——了解其原理

10进制转换为2进制:

做法:除2取余倒着写出所有余数,就是对应的2进制数字形式;

详细解释:将一个10进制数字除以2,得到商和余数,如果商还大于等于2,则继续除以2,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的2进制数字。

10进制转换为8进制:

做法:除8取余倒着写出所有余数,就是对应的8进制数字形式;

详细解释:将一个10进制数字除以8,得到商和余数,如果商还大于等于8,则继续除以8,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的8进制数字。

10进制转换为16进制:

做法:除16取余倒着写出所有余数,就是对应的16进制数字形式;

详细解释:将一个10进制数字除以16,得到商和余数,如果商还大于等于16,则继续除以16,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的16进制数字。

其他进制转换为10进制的做法:

先看一种对数字大小和“数字权值”的理解:

对一个10进制数字: 1234,可以这样去理解它的大小:

(任何数的0次方都是1)

这里,我们对 等等,称为“权值”;每个位的权值是不同的。

对于10进制,每个位上的权值,就是10 的 n次方;

对于8进制,每个位上的权值,就是8的 n次方;

对于16进制,每个位上的权值,就是16 的 n次方;

对于2进制,每个位上的权值,就是2 的 n次方;

 

8进制转换10进制:

将8进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。

举例:有一个8进制数字123,则其实际大小为:

16进制转换10进制:

将16进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。

举例:有一个16进制数字123,则其实际大小为:

2进制转换10进制:

将2进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。

举例:有一个2进制数字101011,则其实际大小为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值