// Removes the bit at the given position and shifts all higher bits right.
function removeBitAndShift(number: number, position: number): number {
/*
number = 22 (10110)
position = 2 (0 = LSB)
Bits: 1 0 1 1 0
^ remove this bit
left = bits above removed bit
right = bits below removed bit
result = (left << position) | right
*/
const left: number = number >> (position + 1); // bits above removed bit
const right: number = number & ((1 << position) - 1); // bits below removed bit
return (left << position) | right; // merge shifted left + right
}
// Prints a 32-bit binary representation of a number.
function printBinary(value: number): void {
/*
Uses:
value.toString(2) → binary string
padStart(32, '0') → pad to 32 bits
grouping into 4-bit chunks for readability
*/
const binary: string = value.toString(2).padStart(32, "0");
const grouped: string = binary.match(/.{1,4}/g)!.join(" ");
console.log(grouped);
}
// Main program
const number: number = 22;
const position: number = 2; // remove bit 2 (0 = LSB)
console.log("Original number in binary:");
printBinary(number);
const result: number = removeBitAndShift(number, position);
console.log("\nNumber after removing bit " + position + " and shifting remaining bits:");
printBinary(result);
console.log("\nResult as integer:", result);
/*
run:
Original number in binary:
0000 0000 0000 0000 0000 0000 0001 0110
Number after removing bit 2 and shifting remaining bits:
0000 0000 0000 0000 0000 0000 0000 1010
Result as integer: 10
*/