【发布时间】:2018-06-08 04:58:15
【问题描述】:
为什么在 nodejs 中会这样
0x80000000 & 0x80000000 < 0
但是
0x40000000 & 0x40000000 > 0
如果我使用更大的十六进制,例如0x800000000
会不会有什么隐藏的bug?
console.log(0x80000000) // => 2147483648
【问题讨论】:
标签: javascript node.js hex 64-bit
为什么在 nodejs 中会这样
0x80000000 & 0x80000000 < 0
但是
0x40000000 & 0x40000000 > 0
如果我使用更大的十六进制,例如0x800000000
会不会有什么隐藏的bug?
console.log(0x80000000) // => 2147483648
【问题讨论】:
标签: javascript node.js hex 64-bit
这是因为数字在计算机中的显示方式 (two's complement)。
十六进制数字8是二进制1000,所以寄存器中数字的二进制表示有最左边的位1(负数)。十六进制数字4 是0100,所以它以0 开头(正数)。
> 0x80000000
-2147483648
> 0x40000000
1073741824
这与 & 运算符无关,尤其是因为对两个相同的东西进行 AND 运算会再次得到那个东西。
【讨论】:
第一种情况下最左边的数字是 8,第二种情况下是 4。从 0-7 的任何数字都是正数,而 8-f 是负数。因为十六进制的 8 是 1000,而十六进制的 4 是 0100。
【讨论】: