为什么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