我正在学习 python,我偶然发现了一些我不明白的东西。
例如:
x = 50
while x:
print(x)
x >>= 1
输出:
50
25
12
6
3
1
所以我推断如果它不是整数或类似的东西,它会除以二并向左舍入。
但是当我将它更改为 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;它是一个二进制二次幂运算符:
>>> x = 6
>>> format(x, '08b')
'00000110'
>>> x <<= 3
>>> x
48
>>> format(x, '08b')
'00110000'
扩充赋值运算符在应用于可变类型(例如列表对象)时可能会有不同的行为,其中操作可以就地发生。例如,listobj += [1, 2, 3]会改变 listobj本身,而不是创建一个新的列表对象,就好像 listobj.extend([1, 2, 3])被调用了。
