我正在学习python,我偶然发现了一些我不理解的东西。
例如:
x = 50
while x:
print(x)
x >>= 1
输出:
50
25
12
6
3
1
所以我推断,如果它不是整数或类似的东西,它会向左和向左分两行。
但是当我将其更改为x>> = 3时,例如输出为:
50
6
有人可以解释一下>> =吗?
如果是这样,这类运营商的有用应用是什么。
答案 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 >>= 1
是x = x >> 1
的缩写。
x >>= k
除以2**k
(即2
加注到k
次幂。
因此,x >>= 3
是8的整数除法。
答案 2 :(得分:4)
这是二元右移算子。
例如,
如果您有0100b
,并执行:0100b >> 2
,那么您将获得数字0001b
(您已将两个位置向右移动)。