Программа курса:
Разбор задачи: Дополнение чисел
Предложенный нами код решения:
def find_complement(num):
"""
:param num: целое число, для которого нужно найти дополнение
:return: дополнение числа в виде целого числа
"""
if num == 0:
return 1 # Дополнение числа 0 всегда будет 1
# Находим маску (число, которое полностью состоит из единиц длиной как двоичное представление num)
mask = (1 << num.bit_length()) - 1
# Применяем XOR с маской, чтобы получить дополнение
complement = num ^ mask
return complement
Проверка на 0:
if num == 0: return 1Здесь предусмотрен случай, когда входное число
numравно 0. В этом случае дополнение числа 0 всегда будет равно 1, так как двоичное представление числа 0 — это просто0, и его дополнение будет равно1.Вычисление маски:
mask = (1 << num.bit_length()) - 1Здесь используется побитовый сдвиг, чтобы создать маску, которая состоит из единичных битов той же длины, что и двоичное представление числа
num.- Функция
num.bit_length()возвращает количество бит, необходимых для представления числа в двоичной системе (например, для числа 5 (двоично 101)bit_lengthвернет 3). - Операция сдвига на
1 << num.bit_length()создаст число, которое в двоичной системе будет содержать 1 в старшем бите, а все остальные биты будут нулями. Например, для числа 5 сbit_length3, это будет 8 (в двоичной системе1000). - Затем, вычитаем 1, чтобы получить маску, в которой все биты установлены в 1, кроме ведущего бита. Например, для числа 5 результат будет 7 (в двоичной системе
111).
- Функция
Применение операции XOR:
complement = num ^ maskОперация XOR (
^) с маской меняет все биты числаnumна противоположные. То есть, где в маске стоит 1, в числеnumбиты будут инвертированы. Это и есть процесс нахождения дополнения числа.Возвращение результата:
return complementВозвращается результат инвертирования битов числа.
Пример работы функции:
- Для числа 5:
- Двоичное представление 5:
101 - Маска:
(1 << 3) - 1 = 7, двоичное представление:111 - XOR:
101 ^ 111 = 010 - Результат:
2
- Двоичное представление 5:
- Для числа 0:
- Дополнение числа 0 всегда будет равно 1.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии