列出位移操作不可交换?

时间:2017-11-21 21:09:28

标签: python python-3.x list bit-manipulation

我在raspbian上运行python-3.2.3,我在代码中遇到了一些不寻常的结果,我在python shell中调试了一下:

    >>> a = [ 7, 33]
    >>> a = [7,33]
    >>> a[0]<<8
    1792
    >>> a[1]
    33
    >>> a[0]<<8 + a[1]
    15393162788864
    >>> a[1] + a[0]<<8
    10240
    >>> a[0]*2**8 + a[1]
    1825

这里发生了什么,我失踪了?我可以解决这个问题,但是在我不理解的场景背后会发生一些事情。我希望所有这些操作都有相同的结果。

1 个答案:

答案 0 :(得分:2)

位移运算符的precedence低于您正在执行的任何其他操作,因此您的表达式相当于:

>>> a[0] << (8 + a[1])
15393162788864
>>> (a[1] + a[0]) << 8
10240