【问题标题】:Convert bit sequence to uint32_t in c++在 C++ 中将位序列转换为 uint32_t
【发布时间】:2015-06-25 11:42:51
【问题描述】:
用户用整数指定寄存器 (LFSR) 长度作为函数的参数,例如他输入数字 5。我需要用所有 1 位初始化这个 5 位长度的 LFSR(长度为 5 的它将是 11111 ) 并以 uint32_t 格式获取种子掩码 - 对于 5 长度寄存器,它将是 0x0001f。
当用户仅将寄存器的长度输入为整数 5 时,为 5 位长度寄存器获取掩码 0x0001f 的最佳方法是什么?
【问题讨论】:
标签:
c++
binary
bit-manipulation
bitwise-operators
uint32
【解决方案1】:
生成 n 位掩码(其中 n
uint32_t mask = (1U << n) - 1U;
解释:考虑 n = 5 的例子:
1U << n = 1U << 5 = 0000 0000 0000 0000 0000 0000 0010 0000 = 0x20
然后我们减去 1 得到:
0000 0000 0000 0000 0000 0000 0001 1111 = 0x1f
【解决方案2】:
另一种选择是
std::uint32_t mask = ~(~0U << n);
另外你必须确保unsigned int在你的系统上不小于32位,写起来可能会更好
std::uint32_t mask = ~(~(std::uint32_t)0 << n);