我注意到在JS中使用按位AND运算符的行为很奇怪:

console.log((0xd41ddb80 & 0xd41ddb80).toString(16))


结果是-2be22480,但是我期望是0xd41ddb80

造成这种现象的原因是什么?

最佳答案

MDN

当解释为带符号的32位整数时,值0xd41ddb80表示数字-736240768。在此数字上使用任何按位运算符都会将其强制为有符号的32位整数:

console.log(0xd41ddb80)


console.log(~~0xd41ddb80)
console.log(0xd41ddb80 & 0xffffffff)
console.log(0xd41ddb80 | 0)
-736240768的以16为基数的等效值为-2be22480,这就是您所看到的。
对于大于或等于0x80000000的任何数字,您都可以观察到类似的行为。

09-25 19:30