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

1 Answer

0 votes
public class ZeroBitsEveryStep {

    /**
        zeroBitsEveryStep(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, ...
    */
    public static int zeroBitsEveryStep(int number, int step) {

        int result = number;

        for (int pos = 0; pos < 32; pos += step) {

            int mask = 1 << pos;

            // If the bit is 1, zero it
            if ((result & mask) != 0) {
                result &= ~mask;
            }
        }

        return result;
    }

    /**
        printBinary(n)
        --------------
        Prints a 32-bit binary representation of an integer.
    */
    public static void printBinary(int n) {

        String s = String.format("%32s", Integer.toBinaryString(n))
                        .replace(' ', '0');

        for (int i = 0; i < 32; i++) {
            System.out.print(s.charAt(i));
            if ((i + 1) % 4 == 0) System.out.print(" ");
        }
    }

    public static void main(String[] args) {

        int number = 536870911;  // 0001 1111 1111 1111 1111 1111 1111 1111
        int step   = 3;          // zero bits 0, 3, 6, 9, ...

        System.out.println("Original number in binary:");
        printBinary(number);

        int result = zeroBitsEveryStep(number, step);

        System.out.println("\n\nNumber after zeroing every " + step +
                           " bits (only if bit was 1):");
        printBinary(result);

        System.out.println("\n\nResult as integer: " + result);
    }
}


/*
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 16 hours ago by avibootz
...