PHP 按位或与 Javascript 按位或

问题描述 投票:0回答:1

Javascript:

var a=209348540618090 | 0;//-1050290838

PHP:

$a= 209348540618090|0;//209348540618090
$a=(209348540618090 & 0xffffffff) | 0;  //3244676458

为什么 PHP 中按位运算的结果与 Javascript 中按位运算的结果不同?

javascript php bitwise-operators bitwise-or
1个回答
0
投票

JavaScript 中的位运算符对 32 位整数进行运算。以下是它在应用 OR 运算符之前如何转换整数:

  1. 取 209348540618090 模数
    2^32
    。结果是 3244676458。
  2. 由于 3244676458 大于
    2^31 = 2147483648
    ,因此减去
    2^32
    。结果是
    -1050290838
  3. 按位或
    -1050290838
    0
    ,结果为
    -1050290838

JS如何将数字转换为32位整数参考:https://tc39.es/ecma262/multipage/abstract-operations.html#sec-toint32

另一方面,PHP 示例简单地将按位 OR 应用于操作数的二进制表示,结果是

3244676458

© www.soinside.com 2019 - 2024. All rights reserved.