我编制了一份运营商,关键字等列表,唯一不理解的是>>或<<在python中。
请解释背后的数学>>和<<。
谢谢。
答案 0 :(得分:12)
他们是bitwise shift运营商。在数学上,它们相当于将(<<
)或(>>
)乘以2乘以右操作数的幂。
x << y
在数学上等同于x * (2 ** y)
。x >> y
在数学上等同于x / (2 ** y)
。它们通常在操作或检查位标志时使用 - 也就是说,一个数字的真正含义是打开或关闭位而不是表观数值,这对于表示一系列布尔值很有用以紧凑的方式。
在您的特定情况下,100 >> 5
与100 / (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