C++ находит наиболее значимый бит двоичного числа?
Я немного покопался и пока не нашел решения своего вопроса. Я хочу взять десятичное число и превратить его в биты. Затем я хочу проанализировать биты и определить старший бит. Например, 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 ответ
Допущения: только числа без знака
для вычисления MSB числа необходимо знать, сколько битов представляют целую часть числа.
если ваше число больше или равно (2^n/2), где n - это число битов для целой части числа, тогда ваш MSB будет равен 1, в противном случае он будет равен 0
пожалуйста, проверьте предположение, логика будет немного отличаться для целых чисел со знаком и еще более сложна для чисел с плавающей запятой с плавающей запятой