быстрая проверка, является ли число степенью двойки
28-08-2009 19:47
к комментариям - к полной версии
- понравилось!
Недавно друг подкинул быстрый метод проверки, является ли число степенью двойки.
A & (A-1) == 0
Тут не только короткая запись, но и быстрая реализация, в том числе на ассемблере, на микроконтроллере. Две-три команды в машинном коде.
Мы с ним обсудили эту формулу, позавидовали тем гениям, которые ее изобрели... Век живи - век учись! Но мы поначалу отнеслись к ней без особого доверия. Что эта формула пропускает все числа, являющиеся степенями двойки - практически очевидно. Но нужно еще доказать, что она не пропускает ни одного числа, на являющегося степенью двойки. Это уже сложнее. Но я додумался до доказательства. Оказалось даже не так сложно.
Есть, правда, одно исключение. Формула пропускает число 0, которое не является степенью двойки. Но это можно назвать вырожденным случаем :)
Так что любителям программирования предлагается тоже поломать голову над доказательством :)
вверх^
к полной версии
понравилось!
в evernote