我有一个javascript代码:
var c = 267414715;
var d = c ^ ("0x81BE16CD");
结果为-1907459466
我似乎无法获得PHP等价物。尝试了以下内容:
<?php
$c=267414715;
$d=$c ^ hexdec("0x81BE16CD");
echo "With hexdec: $d\n";
$d=$c ^ base_convert("0x81BE16CD", 16, 2);
echo "With base_convert(2): $d\n";
$d=$c ^ base_convert("0x81BE16CD", 16, 10);
echo "With base_convert(10): $d\n";
?>
输出:
With hexdec: 2387507830
With base_convert(2): 9223372036587361092
With base_convert(10): 2387507830
有人可以指出正确的等效代码,并解释不同版本(base_convert / hexdec /&#34;正确&#34;等效代码在工作方面有所不同)。
答案 0 :(得分:1)
2387507830 == -1907459466使用无符号整数时(查看最低有效位的位值)
2387507830 = 0000 0000 0000 0000 0000 0000 0000 0000 1000 1110 0100 1110 0111 1010 0111 0110 -1907459466 = 1111 1111 1111 1111 1111 1111 1111 1111 1000 1110 0100 1110 0111 1010 0111 0110
你的问题是32位翻身。为了补偿你,可以简单地和0xffffffff,它将最高32位的0,并使两个答案相同。