为什么Javascript会错误地评估以下内容?
0xAABBCCDD & 0xFF00FF00
在Javascript中:
console.log((0xAABBCCDD & 0xFF00FF00).toString(16)) // -55ff3400
console.log((0xAABBCCDD & 0xFF00FF00) === 0xAA00CC00) // false
在C ++中:
cout << hex << (0xAABBCCDD & 0xFF00FF00) << endl; // 0xAA00CC00
答案 0 :(得分:2)
正如Pointy在他的回答中指出的那样,javascript使用带符号的32位值。您可以使用>>> 0
表示操作是无符号的。
console.log(((0xAABBCCDD & 0xFF00FF00) >>> 0).toString(16)) // Prints aa00cc00
答案 1 :(得分:1)
JavaScript按位操作涉及对32位值的强制。你的价值被截断了。
编辑 - 抱歉;正如评论所指出的那样,这就是符号问题。