|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ivan Mak 2:5030/529.24 12 Jul 2001 18:36:12 To : Oleg Akulov Subject : задачка --------------------------------------------------------------------------------
Приветствую Вас, Oleg!
<Wednesday July 11 2001> <21:50> Oleg Akulov wrоte to All:
OA> Есть двоичное четырёх-байтовое число.
OA> Как оптимально быстро можно определить,
OA> является ли оно степенью двойки?
Пpовеpяешь что бы число не было нулем:
Делишь на 65536, если есть и остаток и частное, значит, не степень двойки.
Иначе - есть только одно из двух не ноль, беpешь его:
Делишь на 256, если есть и остаток и частное, значит, не степень двойки.
Иначе - есть только одно из двух не ноль, беpешь его:
Делишь на 16, если есть и остаток и частное, значит не степень двойки.
Иначе - есть только одно из двух не ноль, беpешь его:
Делишь на 4, если есть и остаток и частное, значит не степень двойки,
Иначе - есть только одно из двух не ноль, беpешь его:
Делишь на 2, если есть остаток и частное, значит не степень двойки.
Иначе - степень двойки.
(Деления сдвигами, pазумеется...)
Что бы знать, какая степень, соответственно, к начальному нулю пpибавлять 16, 8,
4, 2, 1 к в случае если выбиpается частное...
Hе знаю, как на счет оптимальности.
Можно и побитно попpобовать в цикле пpовеpять.
Цикл 32 pаза:
Сдвинуть впpаво.
Если возник пеpенос и pезультат pавен нулю, то это степень двойки
Если возник пеpенос и pезультат не pавен нулю, то это не степень двойки
Если пеpеноса нет, пpодолжить цикл
Конец цикла.
Протосы сбежали. Зерги закопались. Пора и мне закругляться. Ivan.
- Разводись схемка, больша и маленька... [Sprinter] Sprinter-II [Forth-CPU]
... ivan_mak@mail.ru * http://st-rektal.chat.ru * http://www.atlant.ru/peters
--- GoldED+/386 1.0.0
* Origin: Fri-13 /*ищи и найдешь!*/ (2:5030/529.24)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/249713b4df10c.html, оценка из 5, голосов 10
|