How to reverse the bits of a number in Python

2 Answers

0 votes
def reverse_bits(num):
    total_bits = 32
    reverse_bits = 0
    
    for i in range(total_bits):
        if (num & (1 << i)):
            reverse_bits |= 1 << ((total_bits - 1) - i)
    
    return reverse_bits
 
num = 42
print('{:032b}'.format(num))
num = reverse_bits(num)
print('{:032b}'.format(num) + '\n')

num = 19
print('{:032b}'.format(num))
num = reverse_bits(num)
print('{:032b}'.format(num))




'''
run:

00000000000000000000000000101010
01010100000000000000000000000000

00000000000000000000000000010011
11001000000000000000000000000000
 
'''

 



answered Dec 13, 2023 by avibootz
0 votes
def reverse_bits(n: int, width: int = 32) -> int:
    # Convert to binary, reverse the string, convert back to int
    b = f"{n:0{width}b}"
    return int(b[::-1], 2)

def bits(n: int, width: int = 32) -> str:
    # use format() and grouping for readability
    b = f"{n:0{width}b}"
    # group into 8-bit chunks
    return " ".join(b[i:i+8] for i in range(0, width, 8))

a = 19
b = 3

ra = reverse_bits(a)
rb = reverse_bits(b)

print("Original 19:", bits(a))
print("Reversed 19:", bits(ra))
print()
print("Original 3: ", bits(b))
print("Reversed 3: ", bits(rb))


"""
run:

Original 19: 00000000 00000000 00000000 00010011
Reversed 19: 11001000 00000000 00000000 00000000

Original 3:  00000000 00000000 00000000 00000011
Reversed 3:  11000000 00000000 00000000 00000000

"""

 



answered Apr 4 by avibootz
...