object BitSwapper {
def main(args: Array[String]): Unit = {
val n: Int = 90
println(s"Input: ${toBitString(n, 8)}")
val result = swapsOddAndEvenBits(n)
println(s"Result: ${toBitString(result, 8)}")
}
/**
* Swaps odd and even bits in a 32-bit integer.
*/
def swapsOddAndEvenBits(n: Int): Int = {
// Mask to isolate odd bits: binary 101010... (hex: 0xAAAAAAAA)
val oddBits = n & 0xAAAAAAAA
// Mask to isolate even bits: binary 010101... (hex: 0x55555555)
val evenBits = n & 0x55555555
println(s"oddBits: ${toBitString(oddBits, 8)}")
println(s"evenBits: ${toBitString(evenBits, 8)}")
// Shift odd bits right to move them to even positions
val shiftedOddBits = oddBits >>> 1
// Shift even bits left to move them to odd positions
val shiftedEvenBits = evenBits << 1
println(s"oddBits Right-shift: ${toBitString(shiftedOddBits, 8)}")
println(s"evenBits Left-shift: ${toBitString(shiftedEvenBits, 8)}")
// Combine the shifted bits
shiftedOddBits | shiftedEvenBits
}
/**
* Converts a number to a binary string with fixed width.
* Pads with leading zeros to match the desired bit width.
*/
def toBitString(n: Int, width: Int): String = {
val binary = n.toBinaryString
if (binary.length >= width) binary.takeRight(width)
else "0" * (width - binary.length) + binary
}
}
/*
run:
Input: 01011010
oddBits: 00001010
evenBits: 01010000
oddBits Right-shift: 00000101
evenBits Left-shift: 10100000
Result: 10100101
*/