猿问

在C中找到最高位

我需要的是可以输入数字的东西,它将返回最高位。我敢肯定有一个简单的方法。下面是一个示例输出(左边是输入)


1-> 1

2-> 2

3-> 2

4-> 4

5-> 4

6-> 4

7-> 4

8-> 8

9-> 8

...

63-> 32


胡说叔叔
浏览 507回答 3
3回答

尚方宝剑之说

这应该可以解决问题。int hob (int num){&nbsp; &nbsp; if (!num)&nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; int ret = 1;&nbsp; &nbsp; while (num >>= 1)&nbsp; &nbsp; &nbsp; &nbsp; ret <<= 1;&nbsp; &nbsp; return ret;}滚刀(1234)返回1024&nbsp;滚刀(1024)返回1024&nbsp;滚刀(1023)返回512

哔哔one

摘自Hacker's Delight:int hibit(unsigned int n) {&nbsp; &nbsp; n |= (n >>&nbsp; 1);&nbsp; &nbsp; n |= (n >>&nbsp; 2);&nbsp; &nbsp; n |= (n >>&nbsp; 4);&nbsp; &nbsp; n |= (n >>&nbsp; 8);&nbsp; &nbsp; n |= (n >> 16);&nbsp; &nbsp; return n - (n >> 1);}此版本适用于32位整数,但逻辑可以扩展到64位或更高版本。

Smart猫小萌

这可以通过现有的库调用轻松解决。int highestBit(int v){&nbsp; return fls(v) << 1;}Linux手册页提供了有关此功能及其对应于其他输入类型的更多详细信息。
随时随地看视频慕课网APP
我要回答