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. Thus1L<<(32-maskbits)shifts the value 1 to the left32-maskbitstimes.&is the bitwise AND operator.So the loop expression
mask & (1L<<(32-maskbits)) == 0tests all the bits within the value ofmask, from lower to higher. The loop will stop on the first (lowest) nonzero bit ofmask, at which pointmaskbitswill 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, andmaskbitswill be 32mask == 0x0001mask == 0x00000001 (== binary 00000000000000000000000000000001), the loop will again stop on the first iteration, andmaskbitswill be 32mask == 0x1000mask == 0x01000000 (== binary 00000001000000000000000000000000), the loop will stop on the 24th iteration, andmaskbitswill be 8