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

0xAABBCCDD & 0xFF00FF00


用Javascript:

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


在C ++中:

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

最佳答案

正如Pointy在回答中指出的那样,javascript使用带符号的32位值。您可以使用>>> 0表示该操作将被取消签名。

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

09-26 08:30