【发布时间】:2018-05-23 08:20:27
【问题描述】:
如何从左到右而不是从右到左扫描整数(二进制)?我知道我可以从左边开始尝试每一位,然后记录最左边的位,但是有更快的方法吗?是否有内置函数可以立即找到整数中最左边的活动位(即 1)?
我知道从右到左,我可以做类似的事情
int myInt = 1234;
for(int i = 0; i < 32; i++) {
int curr_bit = myInt & (1 << i);
// do something with curr_bit
}
但是,我想从最左边的可用位开始,我想要它的数字“x”,以便1 << x 指向那个确切的数字
(顺便说一句,我正在尝试实现重复平方,我的代码中需要它)。
任何帮助将不胜感激!
【问题讨论】:
-
@NickyC 这不是我的问题...我希望能够立即获得最左边的索引...对不起,如果我的问题有点不清楚。如果我右移,那么如果二进制中的整数类似于 1010,那么我必须从最左边的 2^32 位右移 28 次,然后才能得到第一个 1
-
好的,现在我明白你的问题了。你听说过对数吗?
-
试试吧。
int leftmost_bit_index = log2(myInt); -
你已经测量并与其他人进行了比较?
标签: c++ bit-manipulation bit built-in findfirst