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