Javascript:
var a=209348540618090 | 0;//-1050290838
PHP:
$a= 209348540618090|0;//209348540618090
$a=(209348540618090 & 0xffffffff) | 0; //3244676458
为什么 PHP 中按位运算的结果与 Javascript 中按位运算的结果不同?
JavaScript 中的位运算符对 32 位整数进行运算。以下是它在应用 OR 运算符之前如何转换整数:
2^32
。结果是 3244676458。2^31 = 2147483648
,因此减去 2^32
。结果是-1050290838
。-1050290838
和 0
,结果为 -1050290838
。JS如何将数字转换为32位整数参考:https://tc39.es/ecma262/multipage/abstract-operations.html#sec-toint32
另一方面,PHP 示例简单地将按位 OR 应用于操作数的二进制表示,结果是
3244676458
。