我注意到在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
的任何数字,您都可以观察到类似的行为。