C ++找到二进制数的最高位?

时间:2016-03-08 03:14:42

标签: c++ binary bitset magnitude

我已经做了一些挖掘,但我还没有找到解决方案。我想取一个十进制数并将其转换为位。然后我想分析这些位并确定最高位。例如,8以二进制表示为1000。最重要的位在2 ^ 4位置。我发现的最佳解决方案是执行类似

的操作
int temp=8;
bitset<32> binary;
binary=temp;
int pos;

for (int i=32;i>=0;i--){
if (binary[i]==1) {
pos=i;
break;  
}
}

但我想知道是否有更好的解决方案呢?有没有办法不包括前导零,只有二进制数是1000而不是00 .... 1000? temp中的值可以是包含32位的任何数字。

1 个答案:

答案 0 :(得分:0)

假设:仅限无符号数字

计算MSB的数量,你需要知道有多少位代表数字的整数部分。

如果你的数字大于或等于(2 ^ n / 2),其中n是数字整数部分的位数,那么你的MSB将是1,否则它将是0

请验证假设,对于有符号整数,逻辑会略有不同,对于定点浮点的浮点,逻辑会更复杂