I found the following thread:
Calculate broadcast address from ip and subnet mask and there the link to http://lpccomp.bc.ca/netmask/netmask.c
Could someone please explain the following line, I don't understand:
for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- )
especially mask & (1L<<(32-maskbits))
<< is the bitwise left shift operator; it shifts the bits of a value left by the given amount. Thus 1L<<(32-maskbits) shifts the value 1 to the left 32-maskbits times.
& is the bitwise AND operator.
So the loop expression mask & (1L<<(32-maskbits)) == 0 tests all the bits within the value of mask, from lower to higher. The loop will stop on the first (lowest) nonzero bit of mask, at which point maskbits will contain the number of bits above (and including) that bit.
E.g.
mask == 0xFFFFmask == 0xFFFFFFFF (== binary 11111111111111111111111111111111), the loop will stop on the first iteration, and maskbits will be 32mask == 0x0001mask == 0x00000001 (== binary 00000000000000000000000000000001), the loop will again stop on the first iteration, and maskbits will be 32mask == 0x1000mask == 0x01000000 (== binary 00000001000000000000000000000000), the loop will stop on the 24th iteration, and maskbits will be 8Have a look at bitwise operators, specifically left shift.
http://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_C.2C_C.2B.2B_and_Java
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With