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的幂.