我找到了以下主题:
从IP地址和子网掩码计算广播地址,其中链接指向http://lpccomp.bc.ca/netmask/netmask.c 请问有人能解释一下以下这行代码是什么意思吗?
从IP地址和子网掩码计算广播地址,其中链接指向http://lpccomp.bc.ca/netmask/netmask.c 请问有人能解释一下以下这行代码是什么意思吗?
for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- )
especially mask & (1L<<(32-maskbits))
long
类型来声明变量。因为在这些平台上,int
类型只有 16 位长,如果你将任何int
值左移超过 16 位,结果是未定义的(可能为 0)。而将值声明为long
可以确保它至少有 32 位长。 - Péter Töröklong
的宽度为32,对于maskbits
的值为1,移位操作1L << 31
可能会产生未定义的行为。因此,在这里,至少应该将1L
替换为1UL
,以获得一个无符号长整型的掩码值。更好的做法是使用UINT32_C(1)
来代替。 - Jens Gustedt