为什么在nodejs
__COUNTER__
但
0x80000000 & 0x80000000 < 0
如果我使用更多大的十六进制,如0x40000000 & 0x40000000 > 0
它会有任何隐藏的错误吗?
console.log(0x80000000)// =&gt; 2147483648
答案 0 :(得分:1)
这是因为数字在计算机中呈现的方式(two's complement)。
十六进制数字8
是二进制1000
,因此寄存器中数字的二进制表示最左边的位1
(负数)。十六进制数4
为0100
,因此它以0
(正数)开头。
> 0x80000000
-2147483648
> 0x40000000
1073741824
它与&
运算符无关,特别是因为ANDing两个相同的东西再次给出了这个东西。
答案 1 :(得分:0)
第一种情况下最左边的数字是8,第二种情况下最左边的数字是4. 0-7的任何一个是正数,8-f是负数。因为十六进制中的8是1000而十六进制中的4是0100。