TheAlgorithms-Python
43 строки · 1.1 Кб
1# Information on 2's complement: https://en.wikipedia.org/wiki/Two%27s_complement
2
3
4def twos_complement(number: int) -> str:
5"""
6Take in a negative integer 'number'.
7Return the two's complement representation of 'number'.
8
9>>> twos_complement(0)
10'0b0'
11>>> twos_complement(-1)
12'0b11'
13>>> twos_complement(-5)
14'0b1011'
15>>> twos_complement(-17)
16'0b101111'
17>>> twos_complement(-207)
18'0b100110001'
19>>> twos_complement(1)
20Traceback (most recent call last):
21...
22ValueError: input must be a negative integer
23"""
24if number > 0:
25raise ValueError("input must be a negative integer")
26binary_number_length = len(bin(number)[3:])
27twos_complement_number = bin(abs(number) - (1 << binary_number_length))[3:]
28twos_complement_number = (
29(
30"1"
31+ "0" * (binary_number_length - len(twos_complement_number))
32+ twos_complement_number
33)
34if number < 0
35else "0"
36)
37return "0b" + twos_complement_number
38
39
40if __name__ == "__main__":
41import doctest
42
43doctest.testmod()
44