Fix reverse_bits.py: correct 32-bit reversal and improve docstrings (#12924)

* Fix reverse_bits.py (#12868)

* Update reverse_bits.py

* Update reverse_bits.py

* Update reverse_bits.py

* Update reverse_bits.py

* Update reverse_bits.py

---------

Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru>
This commit is contained in:
conti
2025-08-24 13:49:43 +02:00
committed by GitHub
parent 9ddb0272bf
commit 060fd8ee2c

View File

@@ -1,6 +1,6 @@
def get_reverse_bit_string(number: int) -> str: def get_reverse_bit_string(number: int) -> str:
""" """
return the bit string of an integer Return the reverse bit string of a 32 bit integer
>>> get_reverse_bit_string(9) >>> get_reverse_bit_string(9)
'10010000000000000000000000000000' '10010000000000000000000000000000'
@@ -8,76 +8,76 @@ def get_reverse_bit_string(number: int) -> str:
'11010100000000000000000000000000' '11010100000000000000000000000000'
>>> get_reverse_bit_string(2873) >>> get_reverse_bit_string(2873)
'10011100110100000000000000000000' '10011100110100000000000000000000'
>>> get_reverse_bit_string(2550136832)
'00000000000000000000000000011001'
>>> get_reverse_bit_string("this is not a number") >>> get_reverse_bit_string("this is not a number")
Traceback (most recent call last): Traceback (most recent call last):
... ...
TypeError: operation can not be conducted on a object of type str TypeError: operation can not be conducted on an object of type str
""" """
if not isinstance(number, int): if not isinstance(number, int):
msg = ( msg = (
"operation can not be conducted on a object of type " "operation can not be conducted on an object of type "
f"{type(number).__name__}" f"{type(number).__name__}"
) )
raise TypeError(msg) raise TypeError(msg)
bit_string = "" bit_string = ""
for _ in range(32): for _ in range(32):
bit_string += str(number % 2) bit_string += str(number % 2)
number = number >> 1 number >>= 1
return bit_string return bit_string
def reverse_bit(number: int) -> str: def reverse_bit(number: int) -> int:
""" """
Take in an 32 bit integer, reverse its bits, Take in a 32 bit integer, reverse its bits, return a 32 bit integer result
return a string of reverse bits
result of a reverse_bit and operation on the integer provided.
>>> reverse_bit(25) >>> reverse_bit(25)
'00000000000000000000000000011001' 2550136832
>>> reverse_bit(37) >>> reverse_bit(37)
'00000000000000000000000000100101' 2751463424
>>> reverse_bit(21) >>> reverse_bit(21)
'00000000000000000000000000010101' 2818572288
>>> reverse_bit(58) >>> reverse_bit(58)
'00000000000000000000000000111010' 1543503872
>>> reverse_bit(0) >>> reverse_bit(0)
'00000000000000000000000000000000' 0
>>> reverse_bit(256) >>> reverse_bit(256)
'00000000000000000000000100000000' 8388608
>>> reverse_bit(2550136832)
25
>>> reverse_bit(-1) >>> reverse_bit(-1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
ValueError: the value of input must be positive ValueError: The value of input must be non-negative
>>> reverse_bit(1.1) >>> reverse_bit(1.1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
TypeError: Input value must be a 'int' type TypeError: Input value must be an 'int' type
>>> reverse_bit("0") >>> reverse_bit("0")
Traceback (most recent call last): Traceback (most recent call last):
... ...
TypeError: '<' not supported between instances of 'str' and 'int' TypeError: Input value must be an 'int' type
""" """
if not isinstance(number, int):
raise TypeError("Input value must be an 'int' type")
if number < 0: if number < 0:
raise ValueError("the value of input must be positive") raise ValueError("The value of input must be non-negative")
elif isinstance(number, float):
raise TypeError("Input value must be a 'int' type")
elif isinstance(number, str):
raise TypeError("'<' not supported between instances of 'str' and 'int'")
result = 0 result = 0
# iterator over [1 to 32],since we are dealing with 32 bit integer # iterator over [0 to 31], since we are dealing with a 32 bit integer
for _ in range(1, 33): for _ in range(32):
# left shift the bits by unity # left shift the bits by unity
result = result << 1 result <<= 1
# get the end bit # get the end bit
end_bit = number % 2 end_bit = number & 1
# right shift the bits by unity # right shift the bits by unity
number = number >> 1 number >>= 1
# add that bit to our ans # add that bit to our answer
result = result | end_bit result |= end_bit
return get_reverse_bit_string(result) return result
if __name__ == "__main__": if __name__ == "__main__":