代码之家  ›  专栏  ›  技术社区  ›  Andrew

javascript中的位移位

  •  21
  • Andrew  · 技术社区  · 15 年前

    我有一个很大的数字:5799218898。想把它右移到13位。
    所以,Windows计算器或python给了我:

    5799218898 >> 13 | 100010100100001110011111100001 >> 13
    70791            | 10001010010000111
    

    果不其然。

    但是Javascript:

    5799218898 >> 13 | 100010100100001110011111100001 >> 13
    183624           | 101100110101001000
    

    我认为这是因为JavaScript中的内部整数表示,但找不到任何相关内容。

    3 回复  |  直到 15 年前
        1
  •  25
  •   kennytm    15 年前

    在ecmascript(javascript)中,逐位操作始终是32位的。因此,5799218898被切碎成32位,成为1504251602。这个整数给出183624。

    在python中,它们是任意长度的整数。所以没问题。

    (Windows计算器中的数字是64位的,足以容纳5799218898。)

    (正确答案应该是707912。)

        2
  •  2
  •   Ates Goral    15 年前

    您拥有的数字(5799218898)超过32位。您没有提到要测试的javascript引擎,但很可能是32位的。

    要进行测试,请在数字的开始处修剪“5”,使您落入32位边界内。那你的轮班工作应该很好。

        3
  •  2
  •   Marcel Korpel    15 年前

    尼古拉斯·扎卡斯 states 以下内容:

    即使javascript数字是 技术上存储在64位整数中 值被视为re 32 位运算符为 卷入的。