在 C++ 中将位序列转换为 uint32_t

Convert bit sequence to uint32_t in c++

用户用整数指定寄存器(LFSR)长度作为函数的参数,例如他输入数字 5。我需要用所有 1 位初始化这个 5 位长度的 LFSR(对于长度 5,它将是 11111) 并获得格式为 uint32_t 的种子掩码 - 对于 5 长度的寄存器,它将是 0x0001f.

当用户仅输入整数 5 的寄存器长度时,获取 5 位长度寄存器掩码 0x0001f 的最佳方法是什么?

生成 n 位掩码(其中 n < 32):

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

另一种选择是

std::uint32_t mask = ~(~0U << n);

另外你要确保unsigned int在你的系统上不小于32位,写

可能会更好
std::uint32_t mask = ~(~(std::uint32_t)0 << n);