What does the >> operator do? For example, what does the following operation 10 >> 1 = 5 do?
-
3And this stuff is really useful for example in such way you can faster multiply 2 by some big numbers.If you want to multiply 2 by 16 (2 * 16 = 2 * 2^4) all you need to do is to shift 4 bits to the left. 2 * 16 == 2 << 4 == 32vovaminiof– vovaminiof2013-08-21 09:05:02 +00:00Commented Aug 21, 2013 at 9:05
5 Answers
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
4 Comments
>> 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.
...
3 Comments
>> is O(1) in shift, while no // 2**shift is O(n) in shift. gist.github.com/anonymous/6807431You 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
Comments
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.
1 Comment
a >> b == a / (2**b).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.