为了账号安全,请及时绑定邮箱和手机立即绑定

在C中找到最高位

在C中找到最高位

C
胡说叔叔 2019-09-24 10:54:00
我需要的是可以输入数字的东西,它将返回最高位。我敢肯定有一个简单的方法。下面是一个示例输出(左边是输入)1-> 12-> 23-> 24-> 45-> 46-> 47-> 48-> 89-> 8...63-> 32
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这应该可以解决问题。


int hob (int num)

{

    if (!num)

        return 0;


    int ret = 1;


    while (num >>= 1)

        ret <<= 1;


    return ret;

}

滚刀(1234)返回1024 

滚刀(1024)返回1024 

滚刀(1023)返回512


查看完整回答
反对 回复 2019-09-24
?
哔哔one

TA贡献1854条经验 获得超8个赞

摘自Hacker's Delight:


int hibit(unsigned int n) {

    n |= (n >>  1);

    n |= (n >>  2);

    n |= (n >>  4);

    n |= (n >>  8);

    n |= (n >> 16);

    return n - (n >> 1);

}

此版本适用于32位整数,但逻辑可以扩展到64位或更高版本。


查看完整回答
反对 回复 2019-09-24
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

这可以通过现有的库调用轻松解决。


int highestBit(int v){

  return fls(v) << 1;

}

Linux手册页提供了有关此功能及其对应于其他输入类型的更多详细信息。


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 506 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信