【发布时间】:2020-10-17 10:13:09
【问题描述】:
我正在尝试从 CIDR 表示法创建子网掩码。 /8 表示前 8 位为 1。我通过左移来实现这一点(我在这里使用 32 位)(uint)(0xffffffff << (32-8))。
代码运行良好,直到我得到一个 /0 掩码,这导致代码 (uint)(0xffffffff << 32)
现在左移(uint)(0xffffffff << 31) 可以正常工作10000000.00000000.00000000.00000000。
但是左移(uint)(0xffffffff << 32) 得到11111111.11111111.11111111.11111111。虽然预期的结果是00000000.00000000.00000000.00000000。
解决这个问题的最简单方法是什么?使用 if 语句处理 /0 并将所有设置为 0?
【问题讨论】:
标签: c# bit bit-shift bitmask cidr