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

liebaobei 2009-10-14 07:46:02
re
要求在40步之内完成,并且只能用移位,加,减操作,不能用转移
...全文
587 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;
}
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧