我发现了以下线程:
Calculate broadcast address from ip and subnet maskhttp://lpccomp.bc.ca/netmask/netmask.c 的链接

有人可以解释以下行吗,我不明白:

for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- )

特别是 mask & (1L<<(32-maskbits))

最佳答案

<<bitwise left shift operator ;它将一个值的位左移给定的数量。因此 1L<<(32-maskbits) 将值 1 向左移动 32-maskbits 次。
&bitwise AND operator

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

例如。

  • 如果 mask == 0xFFFF mask == 0xFFFFFFFF (== binary 11111111111111111111111111111111) ,循环将在第一次迭代时停止,maskbits 将为 32
  • 如果 mask == 0x0001 mask == 0x00000001 (== binary 00000000000000000000000000000001) ,循环将在第一次迭代时再次停止,maskbits 将为 32
  • 如果 mask == 0x1000 mask == 0x01000000 (== binary 00000001000000000000000000000000) ,循环将在第 24 次迭代时停止,并且 maskbits 将为 8
  • 关于c - 我不明白下面的 C 代码行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3574032/

    10-09 06:40