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

пожалуйста, проверьте предположение, логика будет немного отличаться для целых чисел со знаком и еще более сложна для чисел с плавающей запятой с плавающей запятой

Другие вопросы по тегам