【问题标题】:why does 0x80000000 & 0x80000000 low then 0为什么 0x80000000 & 0x80000000 低然后 0
【发布时间】:2018-06-08 04:58:15
【问题描述】:

为什么在 nodejs 中会这样

0x80000000 & 0x80000000 < 0

但是

0x40000000 & 0x40000000 > 0

如果我使用更大的十六进制,例如0x800000000

会不会有什么隐藏的bug?

POSTAG.ts


console.log(0x80000000) // => 2147483648

【问题讨论】:

    标签: javascript node.js hex 64-bit


    【解决方案1】:

    这是因为数字在计算机中的显示方式 (two's complement)。

    十六进制数字8是二进制1000,所以寄存器中数字的二进制表示有最左边的位1(负数)。十六进制数字40100,所以它以0 开头(正数)。

    > 0x80000000
    -2147483648
    > 0x40000000
    1073741824
    

    这与 &amp; 运算符无关,尤其是因为对两个相同的东西进行 AND 运算会再次得到那个东西。

    【讨论】:

      【解决方案2】:

      第一种情况下最左边的数字是 8,第二种情况下是 4。从 0-7 的任何数字都是正数,而 8-f 是负数。因为十六进制的 8 是 1000,而十六进制的 4 是 0100。

      【讨论】:

        猜你喜欢
        • 2016-03-14
        • 2011-02-02
        • 2015-01-19
        • 2021-06-10
        • 2021-02-15
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多