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

例如:

x = 50

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


输出:

50
25
12
6
3
1


因此,我推断如果不是整数或类似的数字,它将除以2并向左舍入。

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

50
6


有人可以解释>> =做什么吗?

如果是这样,这种运算符有什么有用的应用程序。

最佳答案

>>=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;反之亦然。它是二进制的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])一样。

10-01 21:27