代码之家  ›  专栏  ›  技术社区  ›  Paul Panzer

按位左移相同操作数的不同结果

  •  0
  • Paul Panzer  · 技术社区  · 5 年前

    考虑数组

    a = np.array([64,  8, 16, 24, 32, 40, 48, 56, 64])
    

    它的第一个和最后一个元素是相同的

    a[0] == a[-1]
    # True
    

    现在我们左移 a

    b = 1<<a
    

    比较第一个和最后一个元素

    b[0] == b[-1]
    # False
    

    这到底是怎么回事?

    有人能复制这个吗?这是虫子吗?

    这个 实际值

    b
    # array([                0,               256,             65536,
    #                 16777216,        4294967296,     1099511627776,
    #          281474976710656, 72057594037927936,                 1])
    

    numpy 版本为1.17.0 Python 3.6.5条

    期望值

    任何一个值都有其逻辑:0=1*2^64 mod 2^64和1=1*2^(64 mod 64)

    相关的

    https://github.com/numpy/numpy/issues/10299

    0 回复  |  直到 5 年前
        1
  •  1
  •   Sandipan    5 年前

    对我来说这是真的: 蟒蛇3.7.4 纽比1.17.x

    import numpy
     a = numpy.array([10,20,15,10])
     a[0]==a[-1]
    True
     b = 1<<a
     b[0] == b[-1]
    True
    