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 == 0xFFFF
mask == 0xFFFFFFFF (== binary 11111111111111111111111111111111)
, the loop will stop on the first iteration, and maskbits
will be 32mask == 0x0001
mask == 0x00000001 (== binary 00000000000000000000000000000001)
, the loop will again stop on the first iteration, and maskbits
will be 32mask == 0x1000
mask == 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