How to clear bits in the given range in Python

1 Answer

0 votes
# Print bits of a 32-bit integer
def print_bits(x: int, label: str) -> None:
    # Convert to binary and pad to 32 bits
    bits = format(x & 0xFFFFFFFF, "032b")
    print(f"{label}: {bits}")


# Clear bits in range [l, r] inclusive (0 = least significant bit)
def clear_bits(x: int, l: int, r: int) -> int:
    if l < 0 or r > 31 or l > r:
        raise ValueError("Invalid bit range")

    # maskLeft:
    # Create a mask with 1s above bit r and 0s from bit r down to 0.
    # Example: r = 5 → maskLeft = 11111111 11111111 11111111 11000000
    mask_left = (~0 << (r + 1)) & 0xFFFFFFFF
    print_bits(mask_left, "maskLeft ")

    # maskRight:
    # Create a mask with 1s below bit l and 0s from bit l upward.
    # Example: l = 3 → maskRight = 00000000 00000000 00000000 00000111
    mask_right = ((1 << l) - 1) & 0xFFFFFFFF
    print_bits(mask_right, "maskRight")

    # Combine both masks:
    # mask_left keeps bits above r.
    # mask_right keeps bits below l.
    # The range [l, r] becomes 0s.
    mask = (mask_left | mask_right) & 0xFFFFFFFF
    print_bits(mask, "mask     ")

    return x & mask


def main():
    value = 0b11111100111111001111110011111100
    l = 3   # start bit
    r = 10  # end bit

    result = clear_bits(value, l, r)

    print_bits(value,  "Before   ")
    print_bits(result, "After    ")


if __name__ == "__main__":
    main()



'''
run:

maskLeft : 11111111111111111111100000000000
maskRight: 00000000000000000000000000000111
mask     : 11111111111111111111100000000111
Before   : 11111100111111001111110011111100
After    : 11111100111111001111100000000100

'''

 



answered Dec 30, 2025 by avibootz
...