给李书记点个赞吧
php中数据类型划分详解

php中数据类型划分详解

作者:李书记php 时间:2016-11-25 分类:学习php 评论:0条 浏览:757

在php总体划分有8种数据类型,这八种类型分布分为基本类型(整数类型: int, integer、浮点数类型: float,double, real、字符串类型: string、布尔类型: bool, boolean 这种类型,只有2个数据:true,false)、复合类型( 数组: array、对象: object)、特殊类型(空类型: null 这种类型中,只有一个数据,那就是null、资源类型: resource)。那么针对这些类型李书记做相关介绍。

整数类型

在整数类型中有四种写法,请大家注意:

$n1 = 123; //10进制数字写法
$n2 = 0123; //8进制数字写法,实际n2中存储的数字比123小
$n3 = 0x123; //16进制数字写法,实际n3中存储的数字比123大
$n4 = 0b1010; //2进制数字写法(目前不学)

$n1 = 123;        //10进制数字写法
$n2 = 0123;        //8进制数字写法,实际n2中存储的数字比123小
$n3 = 0x123;    //16进制数字写法,实际n3中存储的数字比123大
echo "$n1, $n2, $n3";

进制转换问题

首先记住这几个单词: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进制数字形式的字符串!!!

$n1 = 123;    //这是10进制的一个数字:
$s1 = decbin($n1);    //将10进制转换为2进制
$s2 = decoct($n1);    //将10进制转换为8进制
$s3 = dechex($n1);    //将10进制转换为16进制
echo "<br />$n1 的 2进制形式为:$s1";
echo "<br />$n1 的 8进制形式为:$s2";
echo "<br />$n1 的 16进制形式为:$s3";
2,其他3种进制,转换为10进制:

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

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

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

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

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

$num2 = "1010110";
$num8 = "123";        //注意,当做8进制数字
    //注意,这里,写的本质是一个”字符串“,不整数数字
    //所以,不需要加0,即无需写成"0123"
$num16 = "123abc";    //注意,当做16进制数字
$m1 = bindec($num2);    //将2进制字符串转换为10进制数字
$m2 = octdec($num8);    //将8进制字符串转换为10进制数字
$m3 = hexdec($num16);    //将16进制字符串转换为10进制数字
echo "<br />2进制数字:$num2 的对应10进制值为:$m1";
echo "<br />8进制数字:$num8 的对应10进制值为:$m2";
echo "<br />16进制数字:$num16 的对应10进制值为:$m3";
$m4 = 0x123abc;    //直接定义该16进制的数字!——其实内部的大小,然后是以10进制来衡量的!
echo "<br />m4 = $m4" ;

一个思考题:

将8进制字符串”12345”,转换为2进制结果,怎么做?

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

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

补充进制基础知识:

10进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
8进制 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21
16进制 1 2 3 4 5 6 7 8 9 A B C D E F 10 11
2进制 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001
20 21 22 23 24
1 2 4 8 16

一个课后题:

$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进制转换为8进制

10进制转换为16进制:

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

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

10进制转换为16进制

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

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

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

1234 = 1*103 + 2*102 + 3*101 + 4*100 = 1000 + 200 + 30 + 4; (任何数的0次方都是1)

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

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

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

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

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

8进制转换10进制:

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

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

1 * 82 + 2 * 81 + 3 * 80 = 64 + 16 + 3 = 83;

16进制转换10进制:

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

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

1 * 162 + 2 * 161 + 3 * 160 = 256 + 32 + 3 = 291;

2进制转换10进制:

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

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

1 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20= 32 + 0 + 8 + 0 + 2 + 1 = 43;

  

发表评论

电子邮件地址不会被公开。 必填项已用*标注