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

1 Answer

0 votes
/*
    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, ...
*/
function zeroBitsEveryStep(n: number, step: number): number {

    let result: number = n;

    for (let pos: number = 0; pos < 32; pos += step) {

        const mask: number = 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.
*/
function printBinary(n: number): void {

    const s: string = n.toString(2).padStart(32, "0");

    let out: string = "";
    for (let i: number = 0; i < 32; i++) {
        out += s[i];
        if ((i + 1) % 4 === 0) out += " ";
    }

    console.log(out);
}

// Main program
const n: number = 536870911;   // 0001 1111 1111 1111 1111 1111 1111 1111
const step: number   = 3;           // zero bits 0, 3, 6, 9, ...

console.log("Original number in binary:");
printBinary(n);

const result: number = zeroBitsEveryStep(n, step);

console.log("\nNumber after zeroing every " + step + " bits (only if bit was 1):");
printBinary(result);

console.log("\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
...