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