在c ++

时间:2015-06-25 11:42:51

标签: c++ binary bit-manipulation bitwise-operators uint32

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

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

2 个答案:

答案 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);