我不明白以下C代码行

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

Pét*_*rök 6

<<按位左移运算符 ; 它将剩余给定数量的值的位移位.因此1L<<(32-maskbits)将值1移动到左侧32-maskbits.

&按位AND运算符.

因此循环表达式mask & (1L<<(32-maskbits)) == 0测试值中的所有位mask,从低到高.循环将在第一个(最低)非零位停止mask,此时maskbits将包含该位以上(和包括)位的位数.

例如

  • 如果,循环将在第一次迭代时停止,并且将为32mask == 0xFFFF mask == 0xFFFFFFFF (== binary 11111111111111111111111111111111)maskbits
  • 如果,循环将在第一次迭代时再次停止,并且将为32mask == 0x0001 mask == 0x00000001 (== binary 00000000000000000000000000000001)maskbits
  • if ,循环将在第24次迭代时停止,并且将为8mask == 0x1000 mask == 0x01000000 (== binary 00000001000000000000000000000000)maskbits