为什么两个相同值的按位AND产生不同的值?

时间:2016-07-13 16:04:06

标签: javascript bitwise-operators bitwise-and

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

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

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

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:5)

来自MDN

  

所有位运算符的操作数都以2的补码格式转换为带符号的32位整数。

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

console.log(~~0xd41ddb80)
console.log(0xd41ddb80 & 0xffffffff)
console.log(0xd41ddb80 | 0)

-736240768的16等效基数为-2be22480,这就是您所看到的。

您可以观察到大于或等于0x80000000的任何数字的类似行为。