填充可变数量的
用未知(在编译时)数量填充变量的最佳方法是什么?例如,假设:
int n = 5;
int b = fillwithones(5);
现在 b 包含 11111(二进制)。
我不能只是硬编码 int b = 31 因为 n 提前不知道(在我的应用程序中)。
我可以做这样的事情:
int b = pow(2, n) - 1
但是使用战俘似乎非常浪费。
谢谢!
What's the best way to fill a variable with an unknown (at compile time) number of ones? For example, let's say:
int n = 5;
int b = fillwithones(5);
now b contains 11111 (in binary).
I can't just hard code int b = 31 because n is not known ahead of time (in my application).
I could do something like this:
int b = pow(2, n) - 1
But using a pow seems very wasteful.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用左移,然后减去 1:
这样做的原因是 1 左移 n 次 与 2n 相同,因为每个唯一的位位置代表 2 的幂。
You can use left shift and then subtract 1:
The reason this works is 1 shifted left n times is the same as 2n, as each sole bit position represents a power of 2.
将最高位设为 1、将最低位设为 0 的一个有趣方法是使用这个不错的技巧:
这是有效的,因为对负数进行左移操作将保留操作的符号,并且由于 INT_MIN 是 10000....0000向左移动 n 将使 n 位变为 1,但在另一侧。
A funny way to get the highest bits as 1 and the lowest bits as zero is using this nice trick:
This works because shift left operation on a negative number will mantain the sign of the operation, and since INT_MIN is 10000....0000 shifting it by n to the left will give you n bits to 1, but on the other side.