PHP Bitwise XOR vs. JavaScript Bitwise XOR

爷,独闯天下 提交于 2019-12-07 18:38:22

问题


I'm trying to find a way to make PHP Bitwise XOR results match the results of JavaScript Bitwise XOR. I came across different questions of this issue, and all without answers. Here are a few of them:

Javascript & PHP Xor equivalent

php bitwise XOR and js bitwise XOR producing different results

JS bitwise XOR operator acts differently from PHP’s counterpart. How to get the same result as PHP returns?

I know that PHP is using 64 bit compared to 32 bit JavaScript, but my question is, is there any manual way to count similar results? How can we make PHP get similar results as JS?

If the numbers are short, the results will always be the same in JS and PHP, However, if the numbers are long, the issue happens. Example:

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

JS Output:

166587472

PHP Code:

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

PHP Output:

21641423952

Sometimes JavaScript gives negative results:

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

JS Output

-272722143

PHP Code:

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

PHP Output:

523713287969

回答1:


Mask to a signed int.

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


来源:https://stackoverflow.com/questions/51344521/php-bitwise-xor-vs-javascript-bitwise-xor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!