Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.46.36] |
|
Сообщ.
#1
,
|
|
|
Нужно найти ближайший делитель от исходного числа чтобы делилось на 16 без остатка
Банальное выглядит так v:= 1111; while (V mod 16) <> 0 do Inc(V); но может можно как-то красивее и быстрее ? |
Сообщ.
#2
,
|
|
|
((V + (16-1)) div 16) * 16
|
Сообщ.
#3
,
|
|
|
Цитата Jiro @ но может можно как-то красивее и быстрее ? В положительную сторону: v:= 1111; v:= v + 16 - (v mod 16); В отрицательную сторону: v:= 1111; v:= v - (v mod 16); В этом то и суть остатка от деления. А насчёт "быстрее" - не уверен. |
Сообщ.
#4
,
|
|
|
Цитата VisualProg @ А насчёт "быстрее" - не уверен. Со степенью двойки компилятор подставляет битовые операции вместо деления, т.ч. это очень быстро |
Сообщ.
#5
,
|
|
|
(X + 15) and -16;
|
Сообщ.
#6
,
|
|
|
(X + 8) and -16;
|