![]() |
|
|
|
|
#1
|
|||
|
|||
|
Подскажите как найти близлежащее число, например есть цифры: 1,2,4,8,16,32,64,128 они будут всегда такими, и например число из переменной 46 , нужно найти ближнее число к 46 которое больше и из большего вычесть 46
|
|
#2
|
||||
|
||||
|
Код:
var
n: Integer;
m: Integer;
i: Integer;
begin
n:=46;
m:=n;
i:=0;
while (n>0) and (i<32) do
begin
n:=n shr 1;
Inc(i);
end;
n:=1 shl i;
Edit1.Text:=IntToStr(n-m);
end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Мих123456 (08.01.2017)
| ||
|
#3
|
|||
|
|||
|
Я бы вместо цикла взял логарифм, так будет понятней, имхо.
Код:
i:=1 shl trunc(log2(n)); if i<n then i:=i shl 1; результат:=i-n |
| Этот пользователь сказал Спасибо x128 за это полезное сообщение: | ||
M.A.D.M.A.N. (10.01.2017)
| ||