0 / 0 / 0
Регистрация: 07.03.2019
Сообщений: 16
|
|
1 | |
Определить является ли число степенью двойки29.01.2020, 08:05. Показов 6956. Ответов 10
Метки нет (Все метки)
0
|
29.01.2020, 08:05 | |
Ответы с готовыми решениями:
10
Определить, является ли число степенью двойки Определить, является ли число степенью двойки Определить, является ли число точной степенью двойки Определить, является ли данное число степенью двойки |
0 / 0 / 0
Регистрация: 07.03.2019
Сообщений: 16
|
||||||
29.01.2020, 08:53 [ТС] | 3 | |||||
Все куда проще, спасибо гениальному _stanislav
0
|
"C with Classes"
|
|
29.01.2020, 09:03 | 4 |
да ладно, я с СО скатал
x && !(x & (x - 1) ) , говорят этот трюк популярный.Добавлено через 2 минуты etiy25, в программировании как в жизни (хотя программирование есть часть жизни), если что то делаешь то, с вероятностью 99.9%, это уже кто то сделал до тебя.
0
|
случайный прохожий
2935 / 1952 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
|
|
29.01.2020, 10:13 | 5 |
Все выглядит логичным (только догадаться самому до такой реализации не просто).
Число x является степенью двойки, если оно в двоичном виде в старшем разряде (бите) содержит 1, а остальные биты - 0. Количество бит = n. Тогда (x - 1) содержит (n - 1) бит и все они равны 1. Применяя побитовое "И" (&) для x и (x - 1) получаем 0. Тогда "инверсия" 0 (!0) дает 1. А конструкция x && ... позволяет отсечь из результатов 0 (число).
0
|
gunslinger
|
29.01.2020, 12:10
#7
|
Не по теме: Это не доказательство, а мысли вслух, потому и не было речи о "необходимости или не необходимости" условия.
0
|
Неэпический
|
||||||
29.01.2020, 13:52 | 8 | |||||
Да эта инфа везде лежит. Например: http://graphics.stanford.edu/~... IfPowerOf2
Только почему-то все забывают, что тип должен быть беззнаковым. Для примера:
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,886
|
|
30.01.2020, 09:30 | 9 |
0
|
Неэпический
|
|
30.01.2020, 09:46 | 11 |
Нет, поэтому использовать знаковое не имеет смысла.
Плюс, как было показано выше, подобная операция со знаковым может привести к UB. Можно делать проверку, как Verevkin, но это как бы убивает саму идею.
0
|
30.01.2020, 09:46 | |
30.01.2020, 09:46 | |
Помогаю со студенческими работами здесь
11
Определить, является ли число степенью двойки (циклы) Определить, является ли число целой степенью двойки Определить, является ли заданное число точной степенью двойки Вводится число. Определить, является ли оно степенью двойки. Является ли число степенью двойки Является ли число степенью двойки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |