代码之家  ›  专栏  ›  技术社区  ›  James Monger

在javascript中,当位移位时,16位值变为负值

  •  1
  • James Monger  · 技术社区  · 6 年前

    当我试图将16位值位移时,我看到了一些奇怪的行为

    0xF << 4 == 0xF0 // true
    
    0xFF << 8 == 0xFF00 // true
    
    0xFFF << 12 == 0xFFF000 // true
    
    0xFFFF << 16 == 0xFFFF0000 // false
    

    最后一个是真的原因是 0xFFFF << 16 实际给出的值 -65536 是的。为什么会发生这种情况 0xFFFF0000 是javascript中的有效数字

    1 回复  |  直到 6 年前
        1
  •  3
  •   James Monger    6 年前

    因为javascript使用 signed 32-bit integers 按位运算的数字。

    也就是说,数字可以是负数。

    要获得所需的输出,必须使用 >>> 0 是的。

    (0xFFFF << 16) >>> 0 == 0xFFFF0000