networking - 从网络位计数转换为网络掩码的最佳方法是什么?

标签 networking bit-manipulation

例如,如果我有一个像 172.20.10.0/24 这样的网络规范,“24”就是比特数。将其转换为像 0xffffff00 这样的网络掩码的最佳方法是什么?

最佳答案

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

int suffix = 24;
int mask = 0xffffffff ^ 0xffffffff >> suffix;

如果你知道你的整数正好是 32 位长,那么你只需要输入一次 0xffffffff。
int32_t mask = ~(0xffffffff >> suffix);

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

关于networking - 从网络位计数转换为网络掩码的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/218604/

相关文章:

c - 绑定(bind) : Address Already in Use

我可以引用 C 位域的另一部分吗?

linux - 添加新的 veth 接口(interface)时运行脚本

linux - 获取可提供给AWS安全性的网站IP地址

java - RabbitMQ 发送对象

java - 在 Java 中使用按位 & 运算符和 + 给出不一致的结果

c - SIMD signed with unsigned multiplication for 64-bit * 64-bit to 128-bit

c# - 无需 oAuth 的 Instagram 登录

将 x >= y 转换为 1 或 0,无需分支或 bool 表达式

c# - 在 C# 中将按位或运算符应用于十进制