我需要的是可以输入数字的东西,它将返回最高位。我敢肯定有一个简单的方法。下面是一个示例输出(左边是输入)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
哔哔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位或更高版本。
Smart猫小萌
TA贡献1911条经验 获得超7个赞
这可以通过现有的库调用轻松解决。
int highestBit(int v){
return fls(v) << 1;
}
Linux手册页提供了有关此功能及其对应于其他输入类型的更多详细信息。
- 3 回答
- 0 关注
- 506 浏览
添加回答
举报
0/150
提交
取消