问题描述
换一种思路
int binarysearch(int data)
{
int pos=0;
if ((data & 0xFFFF0000) == 0)
pos += 16;
else
data >>= 16;
if ((data & 0xFF00) == 0)
pos += 8;
else
data >>= 8;
if ((data & 0xF0) == 0)
pos += 4;
else
data >>= 4;
if ((data & 0xC) == 0) // 0b1100
pos += 2;
else
data >>= 2;
if ((data & 0x2) == 0) // 0b10
pos += 1;
return pos;
}
从右到左
int binarysearch(int data)
{
int pos=0;
if ((data & 0x0000FFFF) == 0){
data >>= 16;
pos += 16;
}
if ((data & 0x00FF) == 0){
data >>= 8;
pos += 8;
}
if ((data & 0x0F) == 0){
data >>= 4;
pos += 4;
}
if ((data & 0x3) == 0){ // 0b1100
data >>= 2;
pos += 2;
}
if ((data & 0x1) == 0) // 0b10
pos += 1;
return pos;
}
小结
当然针对特定的处理器还可以做些指令级的优化,比如在x86上记得有一条指令就可以完成这个功能了。
(从网友博客转帖过来,原来代码有误这里做了些修改)
839



被折叠的 条评论
为什么被折叠?



