2

User specifies register (LFSR) length with integer as a parameter for a function, for example he enters number 5. I need to initialize this 5-bit length LFSR with all 1 bits (for length 5 it will be 11111) and get a seed mask in a format uint32_t - for 5-length register it will be 0x0001f.

What is the best way to get mask 0x0001f for 5 bit length register when a user enters only length of the register as an integer number 5?

4

2 回答 2

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
于 2015-06-25T11:45:13.943 回答
2

另一种选择是

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

此外,您必须确保unsigned int系统上不少于 32 位,最好写

std::uint32_t mask = ~(~(std::uint32_t)0 << n);
于 2015-06-25T11:59:33.303 回答