msp*_*err 4 c bit-manipulation bit-shift bitwise-operators
我找到了以下线程:
从ip和子网掩码计算广播地址,并链接到http://lpccomp.bc.ca/netmask/netmask.c
有人可以解释下面这行,我不明白:
for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- )
Run Code Online (Sandbox Code Playgroud)
特别 mask & (1L<<(32-maskbits))
<<是按位左移运算符 ; 它将剩余给定数量的值的位移位.因此1L<<(32-maskbits)将值1移动到左侧32-maskbits.
&是按位AND运算符.
因此循环表达式mask & (1L<<(32-maskbits)) == 0测试值中的所有位mask,从低到高.循环将在第一个(最低)非零位停止mask,此时maskbits将包含该位以上(和包括)位的位数.
例如
mask == 0xFFFFmask == 0xFFFFFFFF (== binary 11111111111111111111111111111111)maskbitsmask == 0x0001mask == 0x00000001 (== binary 00000000000000000000000000000001)maskbitsmask == 0x1000mask == 0x01000000 (== binary 00000001000000000000000000000000)maskbits