object RemoveBitAndShift {
// Removes the bit at the given position and shifts all higher bits right.
def removeBitAndShift(number: Int, position: Int): Int = {
/*
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
*/
val left = number >> (position + 1) // bits above removed bit
val right = number & ((1 << position) - 1) // bits below removed bit
(left << position) | right // merge shifted left + right
}
// Prints a 32-bit binary representation of an integer.
def printBinary(value: Int): Unit = {
/*
Uses:
value.toBinaryString → binary string
pad to 32 bits
group into 4-bit chunks for readability
*/
val binary = value.toBinaryString.reverse.padTo(32, '0').reverse
val grouped = binary.grouped(4).mkString(" ")
println(grouped)
}
def main(args: Array[String]): Unit = {
val number: Int = 22
val position: Int = 2 // remove bit 2 (0 = LSB)
println("Original number in binary:")
printBinary(number)
val result: Int = removeBitAndShift(number, position)
println()
println(s"Number after removing bit $position and shifting remaining bits:")
printBinary(result)
println()
println(s"Result 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
*/