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

JS和Python中^Operator的区别

  •  2
  • antimatter15  · 技术社区  · 15 年前

    我需要移植一些JS代码,其中包括 Math.random()*2147483648)^(new Date).getTime() . 虽然python函数和JS函数在函数上是等价的,但对于这样的大数字,值最终会完全不同。

    >>> 2147483647 ^ 1257628307380
    1257075044427
    

    > 2147483647 ^ 1257628307380
    -1350373301
    

    2 回复  |  直到 12 年前
        1
  •  7
  •   Ned Batchelder    15 年前

    Python具有无限精度整数,而Javascript使用32位整数。您可以手动应用32位限制以获得所需的结果:

    def xor32bit(a, b):
        m = (a ^ b) % (2**32)
        if m > (2**16):
            m -= 2**32
        return m
    
        2
  •  4
  •   Ashwini Chaudhary    12 年前

    最简单的方法是使用ctypes获得与Javascript相同的溢出行为:

    >>> import ctypes
    >>> ctypes.c_int(1257075044427)
    c_long(-1350373301)
    

    >>> ctypes.c_int(1257075044427).value
    -1350373301