为什么这个按位和产生错误的数字?

时间:2014-09-19 01:50:30

标签: javascript bit-manipulation bitwise-and

为什么Javascript会错误地评估以下内容?

0xAABBCCDD & 0xFF00FF00

在Javascript中:

console.log((0xAABBCCDD & 0xFF00FF00).toString(16)) // -55ff3400
console.log((0xAABBCCDD & 0xFF00FF00) === 0xAA00CC00) // false

在C ++中:

cout << hex << (0xAABBCCDD & 0xFF00FF00) << endl; // 0xAA00CC00

2 个答案:

答案 0 :(得分:2)

正如Pointy在他的回答中指出的那样,javascript使用带符号的32位值。您可以使用>>> 0表示操作是无符号的。

console.log(((0xAABBCCDD & 0xFF00FF00) >>> 0).toString(16)) // Prints aa00cc00

答案 1 :(得分:1)

JavaScript按位操作涉及对32位值的强制。你的价值被截断了。

编辑 - 抱歉;正如评论所指出的那样,这就是符号问题。