"David Abbott" <[email protected]> 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" %
MAX_IP
   return '%d.%d.%d.%d' % (l>>24 & 255, l>>16 & 255, l>>8 & 255, l &
255)

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 way down)

HTH,

--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/



_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to