+ -
当前位置:首页 → 问答吧 → 如何求解一个无符号整形数是2的多少次方?

如何求解一个无符号整形数是2的多少次方?

时间:2010-07-31

来源:互联网

就是一个unsigned整形数据只有一个bit位为1;求这个bit的位置;

问题背景,我用一个无符号整形数映射一个32个key值的使用情况;
现在需要求从后向前数,第一个0的bit位,用此bit生成一个特定的键值,键值本身有序;
所以我必须知道0bit位最低的那个字节,而且一定存在这个bit;

if (0xffffffff == unsignedi) return;

unsignedi = ~unsignedi;  转化为求从后向前数最低的一个为1的bit位;
unsignedj = unsignedi - (unsignedi & (unsignedi -1));
//如何继续进行计算unsignedj 对应bit的位置;------我不想一个一个bit找或者二分查找~~~
否则一开始就从后向前一个一个bit查找好的了~~~~~

作者: zbhddt6   发布时间: 2010-07-31

你觉得 bsf bsr 这两个汇编指令怎么样?

假如你必须用C的话,可以折半查找,比如
((a&0xFFFF0000!=0) ? 16 : 0)
+ ((a&0xFF00FF00!=0) ? 8 : 0)
+ ((a&0xF0F0F0F0!=0) ? 4 : 0)
+ ((a&0xCCCCCCC!=0) ? 2 : 0)
+ ((a&0xAAAAAAAA!=0) ? 1 : 0)

作者: bruceteen   发布时间: 2010-08-01

相关阅读 更多