mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-18 01:00:15 +00:00
add reverse_bits.py (#4120)
* add reverse_bits.py * check * Delete binary_xor_operator_new.py * Fix All the errors Co-authored-by: xcodz-dot <xcodz-dot@users.noreply.github.com>
This commit is contained in:
parent
d594f4556c
commit
3f1e376bbc
85
bit_manipulation/reverse_bits.py
Normal file
85
bit_manipulation/reverse_bits.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
def get_reverse_bit_string(number: int) -> str:
|
||||
"""
|
||||
return the bit string of an integer
|
||||
|
||||
>>> get_reverse_bit_string(9)
|
||||
'10010000000000000000000000000000'
|
||||
>>> get_reverse_bit_string(43)
|
||||
'11010100000000000000000000000000'
|
||||
>>> get_reverse_bit_string(2873)
|
||||
'10011100110100000000000000000000'
|
||||
>>> get_reverse_bit_string("this is not a number")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: operation can not be conducted on a object of type str
|
||||
"""
|
||||
if not isinstance(number, int):
|
||||
raise TypeError(
|
||||
"operation can not be conducted on a object of type "
|
||||
f"{type(number).__name__}"
|
||||
)
|
||||
bit_string = ""
|
||||
for _ in range(0, 32):
|
||||
bit_string += str(number % 2)
|
||||
number = number >> 1
|
||||
return bit_string
|
||||
|
||||
|
||||
def reverse_bit(number: int) -> str:
|
||||
"""
|
||||
Take in an 32 bit integer, reverse its bits,
|
||||
return a string of reverse bits
|
||||
|
||||
result of a reverse_bit and operation on the integer provided.
|
||||
|
||||
>>> reverse_bit(25)
|
||||
'00000000000000000000000000011001'
|
||||
>>> reverse_bit(37)
|
||||
'00000000000000000000000000100101'
|
||||
>>> reverse_bit(21)
|
||||
'00000000000000000000000000010101'
|
||||
>>> reverse_bit(58)
|
||||
'00000000000000000000000000111010'
|
||||
>>> reverse_bit(0)
|
||||
'00000000000000000000000000000000'
|
||||
>>> reverse_bit(256)
|
||||
'00000000000000000000000100000000'
|
||||
>>> reverse_bit(-1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: the value of input must be positive
|
||||
|
||||
>>> reverse_bit(1.1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: Input value must be a 'int' type
|
||||
|
||||
>>> reverse_bit("0")
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: '<' not supported between instances of 'str' and 'int'
|
||||
"""
|
||||
if number < 0:
|
||||
raise ValueError("the value of input must be positive")
|
||||
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
|
||||
# iterator over [1 to 32],since we are dealing with 32 bit integer
|
||||
for _ in range(1, 33):
|
||||
# left shift the bits by unity
|
||||
result = result << 1
|
||||
# get the end bit
|
||||
end_bit = number % 2
|
||||
# right shift the bits by unity
|
||||
number = number >> 1
|
||||
# add that bit to our ans
|
||||
result = result | end_bit
|
||||
return get_reverse_bit_string(result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user