先学习几个单词:
dec: 十进制
bin:二进制
oct:八进制
hex:十六进制
- 十进制转二进制decbin(),除2取余倒着写
$v1 = decbin(123); //注意:参数必须是10进制数字,转换后的结果必然是二进制字符串。
我们也可以通过手工的方式来完成10进制转2进制的完整过程。
基本做法是:将10进制数字除以2,并取得余数,如果除得的商不为0,则继续除以2,并继续去的余数,直到商为0。然后将所有取得的余数,按“倒序写出”,就是对应的2进制数字:
- 十进制转八进制decoct(),除8取余倒着写
使用php系统函数:
$r1 = decoct(十进制数字); //结果是一个8进制数字字符串。
我们也可以通过手工的方式来完成10进制转8进制的完整过程。
基本做法是:将10进制数字除以8,并取得余数,如果除得的商不为0,则继续除以8,并继续去的余数,直到商为0。然后将所有取得的余数,按“倒序写出”,就是对应的8进制数字:
- 十进制转十六进制dechex(),除16取余倒着写
16进制的数字包括如下(从0开始):
0 1 2 3 4 5 6 7 8 9 A B C D E F
对应10进制其实是:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
系统函是:dechex(十进制数字), 结果是16进制数字字符串。
手工运算:
基本做法是:将10进制数字除以16,并取得余数,如果除得的商不为0,则继续除以16,并继续去的余数,直到商为0。然后将所有取得的余数,按“倒序写出”,就是对应的16进制数字:
- 二进制转十进制bindec(),每位数值乘以2的权值然后相加
先理解一个“权值”概念:
就是某位数字上的该数字所代表的数的大小。比如:
10进制数字1234,其代表:1*10 3+ 2*102 + 3*101 + 4*100 = 1000+ 200 + 30 + 4;
这里,10 3, 102 ,101 ,等等,就称为权值。
二进制转10进制,就是将每位数值乘以对应位上的权值,然后相加得到的结果。
用系统函数是:
$v1 = bindec(“二进制数字字符串”) ;//得到的结果是10进制数字
结果:
手工转换:
二进制数字的权值,从右到左,分别是:
20, 21, 22, 23, 24, 25,.....
即分别是(10进制大小):
1, 2, 4, 8, 16,32
手工计算:
1010110
=1*26 + 0*XX + 1*24 + 0*XX + 1*22 + 1*21 + 0 //说明,其中XX表示无所谓的数字值
=64 + 0 + 16 + 0 + 4 + 2 + 0
=86
- 八进制转十进制octdec() ,每位数值乘以8的权值然后相加
用系统函数是:
$v1 = octdec(“8进制数字字符串”) ;//得到的结果是10进制数字
结果:
手工算法统2进制转换为10进制,略。
- 十六进制转十进制hexdec() ,每位数值乘以16的权值然后相加
用系统函数是:
$v1 = hexdec(“16进制数字字符串”) ;//得到的结果是10进制数字
结果:
- 注意:十进制转为其他进制结果是字符串,其他进制转为十进制要求给定数据是字符串形式
思考:
$v1 = bindec(123);//理解过程:bindec(“123”) =>bindec(“1”)=>1
$v2 = bindec(0123);//理解:0123是8进制数字,其10进制值为:83,再当作二进制字符串就是“83”,结果就只能是0
$v3 = bindec(“0123”);//理解:因为直接就是字符串了,就当二进制字符串用,结果是1
$v4 = octdec(0123); //理解:0123是8进制数字,其10进制值为:83,再当作8进制字符串就是“83”,但8进制中没有“8”这个数字,就只识别出一个“3”这个数字
以下代码测试:
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/4700.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除