如何求32位二进制数中第一个1的位置

liebaobei 2009-10-14 07:46:02
re
要求在40步之内完成,并且只能用移位,加,减操作,不能用转移
...全文
198 1 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whg01 2009-10-14
查表。
const int pos[]={0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,....};//写到了16,后面的就不写了。
对于i=0-255,pos[i]-1为i的二进制数中第一个1的位置。最低位为bit0。

int GetHightBitPos(int i)
{
return (pos[(i>>24)&0xFF]-1)+ 24 + (pos[(i>>16)&0xFF]-1)+16 +
(pos[(i>>8)&0xFF]-1)+8 + (pos[i&0xFF]-1));
}
回复
liebaobei 2009-10-14
不能用if语句和for语句的,我在帖子里说了不能用转移,就是指不能用这些
回复
phpjspasp 2009-10-14


int k; //k就是32位数,随便你赋值
for(int i=0; (i<32) && !((1<<i)&k); i++)
/* nothing */ ;



和上面的效果一样。
回复
phpjspasp 2009-10-14

int k; //k就是32位数,随便你赋值
for(int i=0; i<32; i++)
{
if( (1<<i)&k ){
cout<<i<<endl; //最低位是第0位。
break;
}
}
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告