ass*_*saf 2 javascript bitwise-operators bitwise-and
我注意到在JS中使用按位AND运算符的奇怪行为:
console.log((0xd41ddb80 & 0xd41ddb80).toString(16))
Run Code Online (Sandbox Code Playgroud)
结果是-2be22480,但我期待0xd41ddb80
这种行为的原因是什么?
来自MDN
所有位运算符的操作数都以二进制补码格式转换为带符号的32位整数.
当解释为带符号的32位整数时,该值0xd41ddb80
表示该数字-736240768
.在此数字上使用任何按位运算符会将其强制转换为带符号的32位整数:
console.log(~~0xd41ddb80)
console.log(0xd41ddb80 & 0xffffffff)
console.log(0xd41ddb80 | 0)
Run Code Online (Sandbox Code Playgroud)
基16当量的-736240768
是-2be22480
,这是你所看到的.
您可以观察到大于或等于的任何数字的类似行为0x80000000
.