请解释python 100>> 5 = 3

时间:2013-05-23 21:47:26

标签: python

我编制了一份运营商,关键字等列表,唯一不理解的是>>或<<在python中。

请解释背后的数学>>和<<。

谢谢。

3 个答案:

答案 0 :(得分:12)

他们是bitwise shift运营商。在数学上,它们相当于将(<<)或(>>)乘以2乘以右操作数的幂。

  • x << y在数学上等同于x * (2 ** y)
  • x >> y在数学上等同于x / (2 ** y)

它们通常在操作或检查位标志时使用 - 也就是说,一个数字的真正含义是打开或关闭位而不是表观数值,这对于表示一系列布尔值很有用以紧凑的方式。

在您的特定情况下,100 >> 5100 / (2 ** 5)相同(按上述等效标准)。简化功率运算符我们得到100 / 32。这种除法的结果是3.125,但移位运算符仅适用于(默认情况下)整数,因此结果被截断。

(这些运算符实际上是作为一种方法来移动构成二进制数左右的1和0,因此硬件实际上从数学角度进行划分。但是,如果你有一个基数为10的数字“12345”并且你将它向右移动两位数,丢弃小数部分,你得到“123”。基本上,你将数字除以10得到2的幂(或100)并向下舍入,这恰恰是>>具有的效果 - 仅在基数2中,因为计算机使用基数2算术。)

答案 1 :(得分:4)

要理解位移,最好查看二进制表示

>>> bin(100)
'0b1100100'
>>> bin(100>>1)
'0b110010'
>>> bin(100>>2)
'0b11001'
>>> bin(100>>3)
'0b1100'
>>> bin(100>>4)
'0b110'
>>> bin(100>>5)
'0b11'
>>> bin(3)
'0b11'
>>> bin(100>>5) == bin(3)
True

当您不考虑二进制时,<< n与乘以2**n相同,而>> n与除以2**n相同。分裂中的分数被丢弃。

答案 2 :(得分:3)

这些是你的左右位移操作符。然而,python像许多其他语言一样支持运算符重载,因此您可以将它们用于其他事情。在您的示例中,100以二进制形式表示为1100100,当您将其向右移动五位数为11或基数为10