[Tutor] operators >> and &
alan.gauld at btinternet.com
Sun Feb 14 00:54:24 CET 2010
"David Abbott" <david at pythontoo.com> wrote
> I am attempting to understand this little program that converts a
> network byte order 32-bit integer to a dotted quad ip address.
> def int2ip(l):
> if MAX_IP < l < 0:
> raise TypeError, "expected int between 0 and %d inclusive" %
> return '%d.%d.%d.%d' % (l>>24 & 255, l>>16 & 255, l>>8 & 255, l &
The >>> shifts the number bitwise to the right.
Thus the number 8 is 1000 in binary
8 >> 3 -> 0001
So taking a 32 bit number and shifting it right 24 bits leaves the
top 8 bits
N & 255 uses a bitwise and to filter the number N by removing
anything outside the 8 bits (should any spurious 1's sneak in...)
In bitwise and a 1 and 1 gives 1 any other combination gives 0.
So and'ing with 255 (11111111) simply repeats the 8 bits of N
while zeroing all the other bits.
Similarly >> 16 gets the top 16 bits and andintg with 255
processes bits 16-24 and zeros the rest.
And so on for the other two groups of 8 bits.
There is more on using bitwise operators and "masking" in my
Using the OS topic in my tutorial(v2). (Look for a "sidebar" half
Author of the Learn to Program web site
More information about the Tutor