>> operator in Python

后端 未结 5 1598
无人及你
无人及你 2020-11-30 08:48

What does the >> operator do? For example, what does the following operation 10 >> 1 = 5 do?

相关标签:
5条回答
  • 2020-11-30 08:58

    See section 5.7 Shifting Operations in the Python Reference Manual.

    They shift the first argument to the left or right by the number of bits given by the second argument.

    0 讨论(0)
  • 2020-11-30 09:02

    Its the right shift operator.

    10 in binary is 1010 now >> 1 says to right shift by 1, effectively loosing the least significant bit to give 101, which is 5 represented in binary.

    In effect it divides the number by 2.

    0 讨论(0)
  • 2020-11-30 09:04

    It's the right bit shift operator, 'moves' all bits once to the right.

    10 in binary is

    1010

    shifted to the right it turns to

    0101

    which is 5

    0 讨论(0)
  • 2020-11-30 09:07

    >> and << are the Right-Shift and Left-Shift bit-operators, i.e., they alter the binary representation of the number (it can be used on other data structures as well, but Python doesn't implement that). They are defined for a class by __rshift__(self, shift) and __lshift__(self, shift).

    Example:

    >>> bin(10) # 10 in binary
    1010
    >>> 10 >> 1 # Shifting all the bits to the right and discarding the rightmost one
    5 
    >>> bin(_) # 5 in binary - you can see the transformation clearly now
    0101 
    
    >>> 10 >> 2 # Shifting all the bits right by two and discarding the two-rightmost ones
    2
    >>> bin(_)
    0010
    

    Shortcut: Just to perform an integer division (i.e., discard the remainder, in Python you'd implement it as //) on a number by 2 raised to the number of bits you were shifting.

    >>> def rshift(no, shift = 1):
    ...     return no // 2**shift
    ...     # This func will now be equivalent to >> operator.
    ...
    
    0 讨论(0)
  • 2020-11-30 09:15

    You can actually overloads right-shift operation(>>) yourself.

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

    Reference: http://www.gossamer-threads.com/lists/python/python/122384

    0 讨论(0)
提交回复
热议问题