我使用下面的代码,结果如下:
$int1=0x2234567890123456;
$int2=0x2232123456322135;
print ("\t \t".base_convert($int1,10,2)."\tint1\n\t \t".base_convert($int2,10,2)."\tint2\n");
结果:
1000110000011001111101011010010000011000111000000110 int1
1000110000010000101011001101111010010000001010100010 int2
其中二进制长 52 bit,理应 62 bit ,为什么呢,我百思不得其解,上网查了许久,好像都没这个内容。心想:要不这个太难,要不根本简单的不值一提,这个肯定不难,那为什么网上没有这个内容或少之又少呢?额?会不会是版本问题,我的PHP_INT_MAX 是 32 位的,不过为什么能表示 52 bit 二进制呢,虽然不准确,不管了。
于是我在网上输入 》在线PHP测试 或直接(http://www.dooccn.com/php5.6/)
在网上输入这行代码:
结果是:(注:网上的经测试是 64 bit 版本)
10001000110100010101100111100010010000000100100011010001010110 int1
10001000110010000100100011010001010110001100100010000100110101 int2
这个结果就正确了。哎,真吭啊!!
经过猜想应该是 0x2234567890123456 先转成 64 bit 大整数,因为超过了 PHP_INT_MAX 所以自动转成 浮点数(用科学计数法表示),然后转成 二进制 丧失了 精度,不过这个精度丧失的有点大,哈哈。