&燃气轮机&燃气轮机;Python中的运算符

&燃气轮机&燃气轮机;Python中的运算符,python,operators,Python,Operators,>操作员做什么?例如,下面的操作10>>1=5做什么?它是右位移位运算符,将所有位向右移动一次 二进制中的10是 1010 向右移动,它会转向 0101 它是5请参见Python参考手册中的一节 他们把第一个论点转移到第二个论点 按位数向左或向右 由第二个论点给出 它是右移操作员 二进制中的10是1010现在>1表示右移1,有效地丢失了给出101的最低有效位,即二进制中表示的5 实际上,它将数字除以2,然后你可以自己重载右移操作(>>) >>> class wierd(str)

>
操作员做什么?例如,下面的操作
10>>1=5
做什么?

它是右位移位运算符,将所有位向右移动一次

二进制中的10是

1010

向右移动,它会转向

0101

它是5

请参见Python参考手册中的一节

他们把第一个论点转移到第二个论点 按位数向左或向右 由第二个论点给出


它是
右移
操作员

二进制中的
10
1010
现在
>1
表示右移
1
,有效地丢失了给出
101
的最低有效位,即二进制中表示的
5


实际上,它将数字除以2,然后你可以自己重载右移操作(>>)

>>> class wierd(str): 
... def __rshift__(self,other): 
... print self, 'followed by', other 
... 
>>> foo = wierd('foo') 
>>> bar = wierd('bar') 
>>> foo>>bar 
foo followed by bar 

参考资料:

注意:在本例中,由于位移位运算符右侧的“1”,它会将它们移动一次。这是否意味着如果向右移位,则数字会减半?@Kishan:不会。这一次正好将数字减半,因为它是交替1和0的数字上的1移位。用转换成二进制的数字做一些测试。你会看到相关性。好吧。。。右移每一步的数字是原来的一半,但会向下舍入。(与“在十进制数中向左移动一个小数点意味着除以10”非常相似,但你失去了点后的值,向下舍入)另一方面,左shft意味着加倍(与将小数点向右移动相比:意味着乘以10)当你说它除以2时,你的意思是将2提升到第二个运算符的幂,换句话说,
A>>b==A/(2**b)
。这个东西非常有用,例如,你可以更快地将2乘以一些大数字。如果你想将2乘以16(2*16=2*2^4),你需要做的就是将4位向左移位。2*16==2请注意,就性能而言,这不是一个好主意<代码>>在班次中为O(1),而
no//2**shift
在班次中为O(n)@lumbric显然,因为不仅位移位在内部的工作方式略有不同,而且它们还具有在C语言中实现的优势。我给出该算法只是为了给出一个例子,并说明它是如何工作的。是的,我这么认为。我只是想用我的评论来澄清这一点。刚接触编程的人可能更喜欢您的示例,而不注意其缺点。
>>> def rshift(no, shift = 1):
...     return no // 2**shift
...     # This func will now be equivalent to >> operator.
...
>>> class wierd(str): 
... def __rshift__(self,other): 
... print self, 'followed by', other 
... 
>>> foo = wierd('foo') 
>>> bar = wierd('bar') 
>>> foo>>bar 
foo followed by bar