首页 > 解决方案 > PHP 按位异或与 JavaScript 按位异或

问题描述

我正在尝试找到一种方法使PHP Bitwise XOR结果与JavaScript Bitwise XOR. 我遇到了这个问题的不同问题,而且都没有答案。这里有几个:

Javascript & PHP Xor 等价物

php按位异或和js按位异或产生不同的结果

JS 按位异或运算符的作用与 PHP 的对应运算符不同。如何获得与 PHP 返回相同的结果?

我知道与 32 位 JavaScript 相比,PHP 使用的是 64 位,但我的问题是,是否有任何手动方法来计算类似结果?我们怎样才能让 PHP 得到和 JS 一样的结果呢?

如果数字很短,在 JS 和 PHP 中结果总是相同的,但是,如果数字很长,就会出现问题。例子:

var a = 234324234232;
var b = 221312312232;
console.log(a^b);

JS输出:

166587472

PHP代码:

$a = 234324234232;
$b = 221312312232;
echo $a^$b;

PHP 输出:

21641423952

有时 JavaScript 会给出否定的结果:

var a = 202338273;
var b = 523511134400;
console.log(a^b);

JS 输出

-272722143

PHP代码:

$a = 202338273;
$b = 523511134400;
echo $a^$b;

PHP 输出:

523713287969

标签: javascriptphpbinarybitwise-operatorsxor

解决方案


掩码为有符号整数。

$c = ($a ^ $b) & 0xffffffff;
if ($c & 0x80000000)
  $c -= 0x100000000;
echo $c;

推荐阅读