How to remove a bit from a number and shift all bits to the right to fill the gap in Scala

1 Answer

0 votes
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

*/

 



answered 1 day ago by avibootz
edited 1 day ago by avibootz

Related questions

...