填写可变数量的

Pet*_*ter 3 c bit-manipulation bitwise-operators

用未知(编译时)数量的变量填充变量的最佳方法是什么?例如,让我们说:

int n = 5;
int b = fillwithones(5);
Run Code Online (Sandbox Code Playgroud)

现在b包含11111(二进制).

我不能只是硬编码int b = 31因为n未提前知道(在我的应用程序中).

我可以这样做:

int b = pow(2, n) - 1
Run Code Online (Sandbox Code Playgroud)

但使用战俘似乎非常浪费.

谢谢!

use*_*116 18

您可以使用左移然后减去1:

unsigned int b = (1U << n) - 1U;

// Broken down into steps
//  1           = 00000001b
//  1 << 5      = 00100000b
// (1 << 5) - 1 = 00011111b
Run Code Online (Sandbox Code Playgroud)

这个工作原因是左移n次n次2 n相同,因为每个唯一位位置代表2的幂.

  • 最好使用`unsigned`而不是`int`. (4认同)