我需要计算IPv4网络掩码的前缀长度。我的第一个天真的方法是
int calculate_prefix_length (uint32_t address) {
int set_bits;
for (set_bits = 0; address; address >>= 1) {
set_bits += address & 1;
}
return set_bits;
}
这可能不是很快。有更好的解决方案吗?
答案 0 :(得分:2)
Netmak通常有' n' ' 1的数量后跟32 - ' n'零。所以先计算零,从32减去给出的数字为1' 1。或者,如果您的网络是A类,您可以先计算“1”的数量。以下内容对于课程“C'网络
int calculate_prefix_length (uint32_t address) {
int zero_bits;
for (zero_bits = 0; (address & 1) == 0; address >>= 1, zero_bits++);
return (32 - zero_bits);
}