TheAlgorithms-Python
55 строк · 1.6 Кб
1"""
2Calculates the sum of two non-negative integers using bitwise operators
3Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number
4"""
5
6
7def bitwise_addition_recursive(number: int, other_number: int) -> int:8"""9>>> bitwise_addition_recursive(4, 5)
109
11>>> bitwise_addition_recursive(8, 9)
1217
13>>> bitwise_addition_recursive(0, 4)
144
15>>> bitwise_addition_recursive(4.5, 9)
16Traceback (most recent call last):
17...
18TypeError: Both arguments MUST be integers!
19>>> bitwise_addition_recursive('4', 9)
20Traceback (most recent call last):
21...
22TypeError: Both arguments MUST be integers!
23>>> bitwise_addition_recursive('4.5', 9)
24Traceback (most recent call last):
25...
26TypeError: Both arguments MUST be integers!
27>>> bitwise_addition_recursive(-1, 9)
28Traceback (most recent call last):
29...
30ValueError: Both arguments MUST be non-negative!
31>>> bitwise_addition_recursive(1, -9)
32Traceback (most recent call last):
33...
34ValueError: Both arguments MUST be non-negative!
35"""
36
37if not isinstance(number, int) or not isinstance(other_number, int):38raise TypeError("Both arguments MUST be integers!")39
40if number < 0 or other_number < 0:41raise ValueError("Both arguments MUST be non-negative!")42
43bitwise_sum = number ^ other_number44carry = number & other_number45
46if carry == 0:47return bitwise_sum48
49return bitwise_addition_recursive(bitwise_sum, carry << 1)50
51
52if __name__ == "__main__":53import doctest54
55doctest.testmod()56