Python:>> =做什么?

时间:2014-02-10 08:17:46

标签: python operators python-2.x

我正在学习python,我偶然发现了一些我不理解的东西。

例如:

x = 50

while x:
    print(x)
    x >>= 1

输出:

50
25
12
6
3
1

所以我推断,如果它不是整数或类似的东西,它会向左和向左分两行。

但是当我将其更改为x>> = 3时,例如输出为:

50
6

有人可以解释一下>> =吗?

如果是这样,这类运营商的有用应用是什么。

3 个答案:

答案 0 :(得分:7)

>>=augmented assignment statement>> right-shift operator。对于int之类的不可变类型,它与完全相同

x = x >> 1

x中的位向右移一步。

如果首先打印x的二进制表示形式,您可以看到它的作用:

>>> x = 50
>>> format(x, '08b')
'00110010'
>>> x >>= 1
>>> format(x, '08b')
'00011001'
>>> x = 50
>>> x >>= 3
>>> format(x, '08b')
'00000110'
>>> x
6

每次向右移动相当于一个分区2;因此,3个班次就好像x被2除以幂3,然后被淹没为整数。

互补运算符是左移<<运算符,将左手整数乘以2;它是二元二次幂运算符:

>>> x = 6
>>> format(x, '08b')
'00000110'
>>> x <<= 3
>>> x
48
>>> format(x, '08b')
'00110000'

当应用于可变类型(例如列表对象)时,增强赋值运算符的行为可能不同,其中操作可以就地进行。例如,listobj += [1, 2, 3]将改变listobj本身,而不是创建新的列表对象,就像调用listobj.extend([1, 2, 3])一样。

答案 1 :(得分:4)

这是augmented assignment right shift operator

x >>= 1x = x >> 1的缩写。

x >>= k除以2**k(即2加注到k次幂。

因此,x >>= 3是8的整数除法。

答案 2 :(得分:4)

这是二元右移算子。 例如, 如果您有0100b,并执行:0100b >> 2,那么您将获得数字0001b(您已将两个位置向右移动)。