我发现了以下线程:
Calculate broadcast address from ip and subnet mask 和 http://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/