为什么在nodejs中
0x80000000 & 0x80000000 < 0
但
0x40000000 & 0x40000000 > 0
如果我使用更大的十六进制像
0x800000000
它会有隐藏的错误吗?
POSTAG.ts
console.log(0x80000000)// => 2147483648
最佳答案
这是因为数字在计算机(two's complement)中的显示方式。
十六进制数字8
是二进制1000
,因此寄存器中数字的二进制表示形式具有最左边的位1
(负数)。十六进制数字4
是0100
,因此它以0
开头(正)。
> 0x80000000
-2147483648
> 0x40000000
1073741824
它与
&
运算符无关,尤其是因为将两个相同的事物进行“与”运算会再次得到该事物。