• Авторизация


быстрая проверка, является ли число степенью двойки 28-08-2009 19:47 к комментариям - к полной версии - понравилось!


Недавно друг подкинул быстрый метод проверки, является ли число степенью двойки.

A & (A-1) == 0

Тут не только короткая запись, но и быстрая реализация, в том числе на ассемблере, на микроконтроллере. Две-три команды в машинном коде.

Мы с ним обсудили эту формулу, позавидовали тем гениям, которые ее изобрели... Век живи - век учись! Но мы поначалу отнеслись к ней без особого доверия. Что эта формула пропускает все числа, являющиеся степенями двойки - практически очевидно. Но нужно еще доказать, что она не пропускает ни одного числа, на являющегося степенью двойки. Это уже сложнее. Но я додумался до доказательства. Оказалось даже не так сложно.

Есть, правда, одно исключение. Формула пропускает число 0, которое не является степенью двойки. Но это можно назвать вырожденным случаем :)

Так что любителям программирования предлагается тоже поломать голову над доказательством :)
вверх^ к полной версии понравилось! в evernote
Комментарии (4):
23-10-2009-14:04 удалить
поскольку степень двойки в двоичном представлении имеет вид 1(0), а число, предшевствующее степени - 0(1) - нулю наше выражение будет равняться только при степени двойки.
Optical_Race 29-10-2009-10:00 удалить
Ты доказал только одну часть теоремы - то, что степени двойки удовлетворяют этому условию. А нужно еще доказать, что условию удовлетворяют только степени двойки и никакие другие числа.
09-04-2014-19:36 удалить
http://bernackiy.name/kak-byistro-proverit-yavlyaetsya-li-chislo-stepenyu-dvoyki/


Комментарии (4): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник быстрая проверка, является ли число степенью двойки | Optical_Race - Дневник Optical_Race | Лента друзей Optical_Race / Полная версия Добавить в друзья Страницы: раньше»