获取 C++ 中的位偏移量
我有一个 int
参数,其可能值为 1,2,4,8,16,32,64。
我需要知道当前值的位偏移量,即每个值分别返回 1、2、3、4、5 或 6。
实现这一目标的最简单方法是什么?
I have an int
parameter with the possible values 1,2,4,8,16,32,64.
I need to know the bit offset of the current value, i.e. for each value return 1, 2, 3, 4, 5, or 6 respectively.
What is the easiest way to achieve that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您在这里有多个答案: http://graphics.stanford.edu/~seander/bithacks .html#IntegerLogObvious
最简单的是,假设您的输入值是 unsigned int v :
但它会在此过程中更改 v 。
编辑:在你的情况下,如果你100%确定你的输入是int和2的幂,查找表可能是最简单和最快的
You have multiple answers here : http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious
the easiest being, assuming you have your input value in an unsigned int v :
but it will change v in the process.
edit: in your case if you are 100% sure your input is and int and a power of 2, a look-up-table may be the simplest and fastest
这是一个对于 32 位值最多只进行五次迭代的版本,与 lezebulon 的答案不同,后者的最坏情况是 32 次迭代。适应 64 位值会将该版本的迭代次数增加到 6 次,而另一个版本最坏情况下会增加到 64 次。
Here's a version that only does five iterations at most for a 32 bit value, unlike lezebulon's answer which has a worst case of 32 iterations. Adapting to 64 bit values increases the iteration count of this version to six and the other to 64 at worst.
您需要做的就是每次循环并移动一点。但有一种更快的方法使用 switch case。为您列出两者。
All you need to do is loop and shift a bit each time. But there's a faster way using switch case. listing both for you.