How to swap all odd and even bits in Python

1 Answer

0 votes
def print_binary(value: int) -> None:
    """
    Prints the 8-bit binary representation of an integer.
    """
    print(format(value & 0xFF, '08b'))


def swap_odd_and_even_bits(n: int) -> int:
    """
    Swaps odd and even bits in a 32-bit integer.
    """
    # (binary: 101010... pattern) to isolate bits in odd positions
    odd_bits = n & 0xAAAAAAAA

    # (binary: 010101... pattern) to isolate bits in even positions
    even_bits = n & 0x55555555

    print("oddBits:  ", end='')
    print_binary(odd_bits)

    print("evenBits: ", end='')
    print_binary(even_bits)

    # Right-shift odd bits by 1 to move them to even positions
    odd_bits >>= 1

    # Left-shift even bits by 1 to move them to odd positions
    even_bits <<= 1

    print("oddBits Right-shift: ", end='')
    print_binary(odd_bits)

    print("evenBits Left-shift: ", end='')
    print_binary(even_bits)

    # Combine shifted bits
    return odd_bits | even_bits


n = 90

# Original number in binary
print_binary(n)

result = swap_odd_and_even_bits(n)

# Final result in binary
print_binary(result)



'''
run:

01011010
oddBits:  00001010
evenBits: 01010000
oddBits Right-shift: 00000101
evenBits Left-shift: 10100000
10100101

'''

 



answered Oct 26 by avibootz
...