How to clear bits in the given range in JavaScript

1 Answer

0 votes
// Print bits of a 32-bit integer
function printBits(x, label) {
    // Convert to binary and pad to 32 bits
    const bits = (x >>> 0).toString(2).padStart(32, "0");
    console.log(`${label}: ${bits}`);
}

// Clear bits in range [l, r] inclusive (0 = least significant bit)
function clearBits(x, l, r) {
    if (l < 0 || r > 31 || l > r) {
        throw new Error("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
    let maskLeft = (~0 << (r + 1)) >>> 0;
    printBits(maskLeft, "maskLeft ");

    // maskRight:
    // Create a mask with 1s below bit l and 0s from bit l upward.
    // Example: l = 3 → maskRight = 00000000 00000000 00000000 00000111
    let maskRight = ((1 << l) - 1) >>> 0;
    printBits(maskRight, "maskRight");

    // Combine both masks:
    // maskLeft keeps bits above r.
    // maskRight keeps bits below l.
    // The range [l, r] becomes 0s.
    let mask = (maskLeft | maskRight) >>> 0;
    printBits(mask, "mask     ");

    return (x & mask) >>> 0;
}

// Main program
function main() {
    let value = 0b11111100111111001111110011111100;

    let l = 3;   // start bit
    let r = 10;  // end bit

    let result = clearBits(value, l, r);

    printBits(value,  "Before   ");
    printBits(result, "After    ");
}

main();



/*
run:

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

*/

 



answered Dec 30, 2025 by avibootz
...