为什么这个按位运算在python和js中没有给出相同的结果?

时间:2014-03-19 21:38:22

标签: javascript python bit-manipulation

在python中:

crc = -1 ^ int("0x806567CB",16)
print crc

导致: -2154129356。

在javascript中:

<html>

<body onload="test()"></body>
<script>
function test()
{

crc = -1 ^ ("0x806567CB");    
document.write(crc);
}
</script>

</html>

导致: 2140837940。

为什么会有差异?

1 个答案:

答案 0 :(得分:2)

Python具有任意精度整数,因此数字0x806567CB只是一个正常的正整数。

Javascript在执行按位运算时会将数字转换为32位整数。 javascript给你的是相同的Python结果,但截断为32位。

要在Python中获得相同的结果:

 x = x & 0xFFFFFFFF   # Keep only 32 bits
 if x >= 0x80000000:
     # Consider it a signed value
     x = -(0x100000000 - x)