用户指定寄存器(LFSR)长度,以整数作为函数的参数,例如,他输入数字5.我需要用所有1位初始化这个5位长度的LFSR(对于长度5,它将是{{1 }}并获取格式11111
的种子掩码 - 对于5长度寄存器,它将是uint32_t
。
当用户只输入整数5的整数时,为5位长度寄存器获取掩码0x0001f
的最佳方法是什么?
答案 0 :(得分:7)
生成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
答案 1 :(得分:2)
另一种选择是
std::uint32_t mask = ~(~0U << n);
此外,您必须确保unsigned int
在系统上不低于32位,可能更好写
std::uint32_t mask = ~(~(std::uint32_t)0 << n);