var
N,k: integer;
begin
k := 0;
ReadLn(N);
while N shr 1 <> 0 do
begin
N := N shr 1;
Inc(k);
end;
WriteLn(k);
ReadLn;
end.
Следующий вариант
uses crt;
var n,k:longint;
begin
clrscr;
repeat
write('Введите положительное число, степень числа 2 n=');
readln(n);
until n>0;
k:=-1;{начнем с -1, чтобы можно было определить 1 как нулевую степень 2}
repeat
{сделаем защиту от "дурака"}
if (n mod 2=1)and(n>2) then{если получили нечетное число больше 2}
begin
write('Это не степень числа 2');
readln;
exit;{выходим из программы}
end;
n:=n div 2;{делим на 2}
k:=k+1;{считаем}
until n=0;{ноль - конец цикла}
write('Это ',k,'-я степень числа 2');;
readln
end.