填写可变数量的

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

int n = 5; int b = fillwithones(5); 

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

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

我可以这样做:

 int b = pow(2, n) - 1 

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

谢谢!

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

 unsigned int b = (1U << n) - 1U; // Broken down into steps // 1 = 00000001b // 1 << 5 = 00100000b // (1 << 5) - 1 = 00011111b 

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

将最高位设为1且将最低位设为零的有趣方法是使用这个好方法:

 #include  ... int b = INT_MIN >> n; 

这是有效的,因为在负数上的左移操作将保持操作的符号,并且因为INT_MIN是10000 …. 0000将它向左移动n将给出n位到1,但在另一侧。