//C++
BOOL IsSubnetMask(char* subnet)
{
unsigned int b = 0, i, n[4];
sscanf(subnet, "%u.%u.%u.%u", &n[3], &n[2], &n[1], &n[0]);
for(i = 0; i < 4; ++i) //将子网掩码存入位无符号整型
b += n[i] << (i * 8);
b = ~b + 1;
if((b & (b - 1)) == 0) //判断是否为^n
return TRUE;
else
return FALSE;
}
详细见 http://hi.baidu.com/roovent/blog/item/e342a423e33f0eaf4623e8b3.html