一般来说,位移运算(>> , <<
)允许我们通过左移或右移操作实现除以或乘以2
的幂次方。
例如:
9 (base 10): 00000000000000000000000000001001 (base 2)
--------------------------------
9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
对于负数:
同样地,-9 >> 2
的结果为 -3
,因为符号被保留:
-9 (base 10): 11111111111111111111111111110111 (base 2)
--------------------------------
-9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
然而,观察 >>>
的行为,在正数时它的表现相同,但在负数时的行为不同:
从左侧开始,零 位被移入。
我找不到任何理由或用途来自左侧进行 0
移位(这将使整个数字为正数):
-9 (base 10): 11111111111111111111111111110111 (base 2)
--------------------------------
-9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)
问题:
在什么情况下我应该使用>>>
?我不明白为什么我会想要从左侧填充零并弄乱我的负数。
回答:
>>>
是Python中的逻辑右移运算符。它将二进制数向右移动,并用0填充左侧,而不是使用符号位扩展(即保持最高位不变)。这意味着如果您需要将正数除以2的幂次方,则可以使用逻辑右移。但是,如果您需要处理负数,则应使用算术右移(使用符号位扩展)。
>>>
运算符。>>
保留符号,但>>>
不会。 - Grijesh Chauhan>>
,但是你什么时候会选择>>>
呢? - Royi Namir>>>
有时我们在编程中使用,例如我在我的回答中使用了它。 - Grijesh Chauhan11111111111111111111111111110111
。我可能想要将其作为无符号整数0xfffffff7
使用,并进行右移以除以它。 - L.B