0

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

0xAABBCCDD & 0xFF00FF00

在 Javascript 中:

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

在 C++ 中:

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

2 回答 2

2

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

console.log(((0xAABBCCDD & 0xFF00FF00) >>> 0).toString(16)) // Prints aa00cc00
于 2014-09-19T02:02:55.780 回答
1

JavaScript 按位运算涉及强制转换为 32 位值。您的值被截断。

编辑——对不起;正如评论指出的那样,问题出在符号位上。

于 2014-09-19T01:51:17.137 回答