forked from TheAlgorithms/Python
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_twos_complement.py
43 lines (37 loc) · 1.09 KB
/
binary_twos_complement.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Information on 2's complement: https://en.wikipedia.org/wiki/Two%27s_complement
deftwos_complement(number: int) ->str:
"""
Take in a negative integer 'number'.
Return the two's complement representation of 'number'.
>>> twos_complement(0)
'0b0'
>>> twos_complement(-1)
'0b11'
>>> twos_complement(-5)
'0b1011'
>>> twos_complement(-17)
'0b101111'
>>> twos_complement(-207)
'0b100110001'
>>> twos_complement(1)
Traceback (most recent call last):
...
ValueError: input must be a negative integer
"""
ifnumber>0:
raiseValueError("input must be a negative integer")
binary_number_length=len(bin(number)[3:])
twos_complement_number=bin(abs(number) - (1<<binary_number_length))[3:]
twos_complement_number= (
(
"1"
+"0"* (binary_number_length-len(twos_complement_number))
+twos_complement_number
)
ifnumber<0
else"0"
)
return"0b"+twos_complement_number
if__name__=="__main__":
importdoctest
doctest.testmod()