当 JavaScript 按位与结果为负数时,如何通过 php 获取与 JavaScrip 相同的运算结果?

php:

echo 4023233417 & 2562383102;
// 2290649224

javaScript:

console.log(4023233417 & 2562383102);
// -2004318072

我又笔算了一下,结果是2290649224。后来查资料发现JavaScript里面32位第一位是符号位,1是负数,结果应该是通过按位取反算出的。
我如何通过php计算得到js中的负值呢?望各位大神帮忙

阅读 980
1 个回答
新手上路,请多包涵
在 JavaScript 中,按位与操作符 & 会将操作数视为 32 位有符号整数。当结果超出有符号整数的范围时,会产生负数。这是因为 JavaScript 使用的是 IEEE 754 双精度浮点格式,但按位运算会将数字视为 32 位整数。

在 PHP 中,按位与操作符 & 默认处理为无符号整数,因此当你对两个大于 2^31 - 1 的数进行按位与时,结果会是一个无符号整数。
  $a = 4023233417;
  $b = 2562383102;
  $result = $a & $b;
  // 将结果转换为有符号整数
  $signedResult = unpack('l', pack('L', $result))[1];
  echo $signedResult; // -2004318072
// 将无符号整数转换为二进制字符串。
pack('L', $result) 
// 将二进制字符串作为有符号整数解包
unpack('l', ...)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题