How to zero every n-bit from a number if that bit is 1 in Python

1 Answer

0 votes
"""
    zero_bits_every_step(number, step)
    ----------------------------------
    Zeros every `step`-th bit (0-based from LSB)
    but only if that bit is currently 1.

    Example:
        number = 536870911
        step = 3  → zero bits 0, 3, 6, 9, ...
"""
def zero_bits_every_step(number: int, step: int) -> int:
    result = number

    for pos in range(0, 32, step):
        mask = 1 << pos

        # If the bit is 1, zero it
        if result & mask:
            result &= ~mask

    return result


"""
    print_binary(n)
    ---------------
    Prints a 32-bit binary representation of an integer.
"""
def print_binary(n: int) -> None:
    s = format(n, "032b")
    grouped = " ".join(s[i:i+4] for i in range(0, 32, 4))
    print(grouped)


def main():
    number = 536870911   # 0001 1111 1111 1111 1111 1111 1111 1111
    step = 3             # zero bits 0, 3, 6, 9, ...

    print("Original number in binary:")
    print_binary(number)

    result = zero_bits_every_step(number, step)

    print("\nNumber after zeroing every", step, "bits (only if bit was 1):")
    print_binary(result)

    print("\nResult as integer:", result)


if __name__ == "__main__":
    main()



"""
run:

Original number in binary:
0001 1111 1111 1111 1111 1111 1111 1111

Number after zeroing every 3 bits (only if bit was 1):
0001 0110 1101 1011 0110 1101 1011 0110

Result as integer: 383479222

"""

 



answered 1 day ago by avibootz
...