/*
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
*/