Q:

Помогите составить алгоритм подбора значения

Необходимо составить алгоритм, принимающий на вход строго положительное n и выводящий k, такое что 2^k ≤ n и 2^k+1 > n
Помогите составить алгоритм, учусь на первом курсе бакалавриата компьютерных наук.
Самым простым способом с функциями If и / или While. Не первой же неделе нам задали такое. Не понимаю с какой стороны подходить к решению этого вопроса. Объясните пожалуйста доступным языком, пошагово.

A:

Числа в компьютере хранятся в двоичной форме (как последовательности нулей и единиц), поэтому например 13 будет выглядеть как 1101.
Делению на 2 соответствует операция сдвига вправо (>>) соответственно умножению сдвиг влево (<<). 
Степени числа 2 таким образом соответствуют цифре 1 в позиции k (степень числа) и 0 в остальных позициях.
Для получения k нам нужно сдвигать вправо число n до тех пор пока оно превышает 0, инкременируя при этом k от (-1). 

КОД
unsigned int n = 1223456789;
int k = -1;

for (unsigned int i = n; i > 0; k++, i >>= 1);

Пошагово:
1. Задаете число n=[ваше число] и k = -1
2. Проверяете n>0
3. True
   3.1 Увеличиваем k на 1
   3.2 Делим n на 2 (целочислено) или, что то же самое, применяем операцию сдвига на 1
   3.3 Переходим к шагу 2
4. False Конец алгоритма. Выводим данные.

