/
xddxdd
/
Python
Обзор
Документация
Войти
/
xddxdd
/
Python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
bit_manipulation/bitwise_addition_recursive.py
55 строк
2 KB
Tianyi Zheng
Move bitwise add (#9097)
27 сен 2023, 16:54
Не верифицирован
27 сен 2023, 16:54
f9b8759
Код
Авторство
О чём код?
""" Calculates the sum of two non-negative integers using bitwise operators Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number """ def bitwise_addition_recursive(number: int, other_number: int) -> int: """ >>> bitwise_addition_recursive(4, 5) 9 >>> bitwise_addition_recursive(8, 9) 17 >>> bitwise_addition_recursive(0, 4) 4 >>> bitwise_addition_recursive(4.5, 9) Traceback (most recent call last): ... TypeError: Both arguments MUST be integers! >>> bitwise_addition_recursive('4', 9) Traceback (most recent call last): ... TypeError: Both arguments MUST be integers! >>> bitwise_addition_recursive('4.5', 9) Traceback (most recent call last): ... TypeError: Both arguments MUST be integers! >>> bitwise_addition_recursive(-1, 9) Traceback (most recent call last): ... ValueError: Both arguments MUST be non-negative! >>> bitwise_addition_recursive(1, -9) Traceback (most recent call last): ... ValueError: Both arguments MUST be non-negative! """ if not isinstance(number, int) or not isinstance(other_number, int): raise TypeError("Both arguments MUST be integers!") if number < 0 or other_number < 0: raise ValueError("Both arguments MUST be non-negative!") bitwise_sum = number ^ other_number carry = number & other_number if carry == 0: return bitwise_sum return bitwise_addition_recursive(bitwise_sum, carry << 1) if __name__ == "__main__": import doctest doctest.testmod()