这是因为您使用的是64位版本的php。在32位系统上,结果将是相同的。
这是一个32位系统上的位会发生什么:
source number: 01100111010001010010001100000001
first shift: 11001110100010100100011000000010
2nd: 10011101000101001000110000000100
3rd: 00111010001010010001100000001000
4th: 01110100010100100011000000010000
5th: 11101000101001000110000000100000
前5位丢失,最后一个号码的最左边位设置,所以它的消极对待。在64位的图像是不同的:
source: 0000000000000000000000000000000001100111010001010010001100000001
shifted: 0000000000000000000000000000110011101000101001000110000000100000
在PHP中,整数是平台相关的(32/64位),使用Javascript总是使用32位整数用于位运算。
要模拟64位系统上的32位移位,请将结果左移32位,然后再移回右移。这将删除额外的位,并导致符号位传播:
$a = 1732584193;
$b = $a << 5;
$c = (($a << 5) << 32) >> 32;
echo $a, "\n"; # 1732584193
echo $b, "\n"; # 55442694176
echo $c, "\n"; # -391880672
我想使用64位PHP是否有可能使它? – 2014-08-31 00:16:32
谢谢你的帮助! – 2014-08-31 00:56:15