Skip to content

Commit 3f1e376

Browse files
ayushbisht2001xcodz-dot
and
xcodz-dot
authored
add reverse_bits.py (TheAlgorithms#4120)
* add reverse_bits.py * check * Delete binary_xor_operator_new.py * Fix All the errors Co-authored-by: xcodz-dot <[email protected]>
1 parent d594f45 commit 3f1e376

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Diff for: bit_manipulation/reverse_bits.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
def get_reverse_bit_string(number: int) -> str:
2+
"""
3+
return the bit string of an integer
4+
5+
>>> get_reverse_bit_string(9)
6+
'10010000000000000000000000000000'
7+
>>> get_reverse_bit_string(43)
8+
'11010100000000000000000000000000'
9+
>>> get_reverse_bit_string(2873)
10+
'10011100110100000000000000000000'
11+
>>> get_reverse_bit_string("this is not a number")
12+
Traceback (most recent call last):
13+
...
14+
TypeError: operation can not be conducted on a object of type str
15+
"""
16+
if not isinstance(number, int):
17+
raise TypeError(
18+
"operation can not be conducted on a object of type "
19+
f"{type(number).__name__}"
20+
)
21+
bit_string = ""
22+
for _ in range(0, 32):
23+
bit_string += str(number % 2)
24+
number = number >> 1
25+
return bit_string
26+
27+
28+
def reverse_bit(number: int) -> str:
29+
"""
30+
Take in an 32 bit integer, reverse its bits,
31+
return a string of reverse bits
32+
33+
result of a reverse_bit and operation on the integer provided.
34+
35+
>>> reverse_bit(25)
36+
'00000000000000000000000000011001'
37+
>>> reverse_bit(37)
38+
'00000000000000000000000000100101'
39+
>>> reverse_bit(21)
40+
'00000000000000000000000000010101'
41+
>>> reverse_bit(58)
42+
'00000000000000000000000000111010'
43+
>>> reverse_bit(0)
44+
'00000000000000000000000000000000'
45+
>>> reverse_bit(256)
46+
'00000000000000000000000100000000'
47+
>>> reverse_bit(-1)
48+
Traceback (most recent call last):
49+
...
50+
ValueError: the value of input must be positive
51+
52+
>>> reverse_bit(1.1)
53+
Traceback (most recent call last):
54+
...
55+
TypeError: Input value must be a 'int' type
56+
57+
>>> reverse_bit("0")
58+
Traceback (most recent call last):
59+
...
60+
TypeError: '<' not supported between instances of 'str' and 'int'
61+
"""
62+
if number < 0:
63+
raise ValueError("the value of input must be positive")
64+
elif isinstance(number, float):
65+
raise TypeError("Input value must be a 'int' type")
66+
elif isinstance(number, str):
67+
raise TypeError("'<' not supported between instances of 'str' and 'int'")
68+
result = 0
69+
# iterator over [1 to 32],since we are dealing with 32 bit integer
70+
for _ in range(1, 33):
71+
# left shift the bits by unity
72+
result = result << 1
73+
# get the end bit
74+
end_bit = number % 2
75+
# right shift the bits by unity
76+
number = number >> 1
77+
# add that bit to our ans
78+
result = result | end_bit
79+
return get_reverse_bit_string(result)
80+
81+
82+
if __name__ == "__main__":
83+
import doctest
84+
85+
doctest.testmod()

0 commit comments

Comments
 (0)