PHP跟JS位移操作的区别
JS代码
console.log(193449512 << 5);
输出结果
PHP代码
echo 193449512 << 5;echo "\n";
输出结果
为什么结果会不一样呢?首先怀疑的是PHP的位数是不是32位导致的,看了下PHP信息排除了。
搜索了一番信息,才找到原因。
js 在进行二进制运算时,使用 32 位二进制整数。
而我本机的PHP是64位,所以导致两种运算的结果不一致。
解决方法:
$a = 193449512;
$bin = decbin($a);
$bin = str_pad($bin, 32, '0', STR_PAD_LEFT);
echo bindec(str_pad(substr($bin, 5), 32, '0', STR_PAD_RIGHT));
echo "\n";
// output 1895417088