从网络bitcount转换为网络掩码的最佳方法是什么?

Cho*_*hoy 8 networking bit-manipulation

例如,如果我有像172.20.10.0/24这样的网络规范,那么"24"就是bitcount.将其转换为像0xffffff00这样的网络掩码的最佳方法是什么?

tva*_*son 7

假设32位掩码和32位int.

int keepBits = 24;  /* actually get it from somewhere else? */

int mask = (0xffffffff >> (32 - keepBits )) << (32 - keepBits);
Run Code Online (Sandbox Code Playgroud)

注意:这不一定是"获取接口的网络掩码的最佳方法是什么?"这一问题的答案.


joe*_*ker 2

为什么要在减法或三元语句上浪费时间?

int suffix = 24;
int mask = 0xffffffff ^ 0xffffffff >> suffix;
Run Code Online (Sandbox Code Playgroud)

如果您知道您的整数正好是 32 位长,那么您只需键入 0xffffffff 一次。

int32_t mask = ~(0xffffffff >> suffix);
Run Code Online (Sandbox Code Playgroud)

两者都编译为完全相同的汇编代码。