Другие языки программирования и технологии

Задачка для программистов. Поможете? Для программеров это проще простого (я знаю это), а вот я чёто не понимаю ваще.

Дано целое число больше 0. Определить, является ли оно целой степенью 2, не используя циклов, рекурсий и операций с плавающей точкой.
ВЯ
В Я он
2 300
ватсон, это элементарно пусть твое число "а" тогда двоичной операцией "а and 1" определяем младший бит,
если 1 - то это нечетное число, если 0 - то четное или ноль .
далее, тем же макаром определяем степень двойки если для каждого бита (целое беззнаковое либо 16, либо 32)
int i=0;
if ((a & 1)==1) i++;
if ((a & 2)==2) i++;
if ((a & 4)==4) i++;
...
if ((a & два в степени номер этой строчки) == два в степени номер этой строчке) i++;
if (i==1) ТО ДА, Число удовлетворяет тому что оно целое степень двойки.
хотя проще было вы в цикле "а" сдвигать (извини, не помню как операция обозначается) по окончанию всех (16 или 32) итерации - проверять у нас один бит был поднят в регистре или все же несколько.

или тупо 32 раза сравнить ...Хотя если узнаете более изящное решение - буду рад его увидеть :)
ВД
Валерий Дедяев
8 642
Лучший ответ
Просессоры семейства Intel имеют встроенную команду POPCNT. Если она возвращает 1, данное число является степенью 2.

В компиляторе GCC эта функция представлена как
int __builtin_popcount (unsigned int x);

Это не то решение, которого ожидают авторы задания, но при прочих равных условиях (вернее, их отсутствии) оно вполне легитимно, к тому же имеет преимущество по времени исполнения по сравнению с любым другим алгоритмом.

To Smex: младший бит тоже канает, ибо 2^0=1, а 0 - целое.
Проверка на чет/нечет не гарантирует, что число - степень двойки. Например, 12 -четное, но целой степень двойки не является.
Так же неизвестна разрядность числа, так что разворачиванием цикла на действия решить тоже не получится.
Число является степенью двойки, если в его двоичном разложении содержится только одна 1, причем находится она НЕ в младшем бите. Хотя да, возможно, что канает и младший бит, но тут надо уточнять условие.

Есть глупое решение - заменить цикл на goto)))
А логарифм по основанию 2 - это операция с плавающей точкой или нет? Я нуб, забыл.

Раскидай на биты, если только старший бит в единице - значит да, иначе нет.
чето мало данных, может я не понял, переформулируй.
если Х - число целое, то и Х в квадрате тоже будет целым, аналогично и про нецелый, как с помощью этого можно ченить определить мне тоже интересно

-\/ \/ \/- apprico, речь, кажется, идет не о четных или нечетных числах, а о целых и дробных. -\/ \/ \/ -

\/ \/ \/ \/