判断一个数的二进制是否是0、1交错

LINUX的net/inet/route.c文件(不同版本可以路径有别)中的bad_mask()函数,代码如下:

 

 /* * Check if a mask is acceptable. */ static inline int bad_mask(unsigned long mask, unsigned long addr) { if (addr & (mask = ~mask)) return 1; mask = ntohl(mask); if (mask & (mask+1)) return 1; return 0; }

 

第二个IF语句就是判断mask的二进制是否为0、1交错的。

由于子网掩码是高位连续为1,低位连续为0的,不可能出现0、1交错的情况,所以,如果IF为真(即出现0、1交错),则说明mask不正确。

你可能感兴趣的:(linux)