Как проверить является ли натуральное число степенью двойки в Python
Как проверить является ли натуральное число степенью двойки в Python
Ответы (3 шт):
Автор выше прав. Объясню математику.
Натуральное число, представленное степенью двойки, имеет в своей двоичной записи одну единицу
Например:
n: 10000000, 01000000, 00100000, ..., 00000001
Что будет, если от такого числа отнимем единицу?
n-1: 01111111, 00111111, 00011111, ..., 00000000
Теперь, взяв and между n и n-1, мы получим все нули в двоичной записи. Для числа, не являющегося степенью двойки, мы не получим настолько "инвертированные" записи. По аналогии с десятичной системой: только отняв от круглого числа вроде 10000 или 1000 единицу, мы получим в результате все девятки.
Проверку на n=0 можно не делать, так как по условию задачи n - натуральное. То есть итоговое решение будет выглядеть как:
(n & (n-1) == 0)