object BitSetDemo {
val BitSize = 16
// Print binary representation of the bits
def printBinary(bits: Int): Unit = {
println(String.format("%16s", Integer.toBinaryString(bits)).replace(' ', '0'))
}
// Find the first set bit (least significant)
def findFirstSetBit(bits: Int): Option[Int] = {
(0 until BitSize).find(i => (bits & (1 << i)) != 0)
}
def printSetBitIndexes(bits: Int): Unit = {
val indexes = (0 until BitSize).filter(i => (bits & (1 << i)) != 0)
println(indexes.mkString(" "))
}
def main(args: Array[String]): Unit = {
var bits = 0
bits |= 1 << 3
bits |= 1 << 5
bits |= 1 << 11
bits |= 1 << 14
printBinary(bits)
findFirstSetBit(bits) match {
case Some(index) => println(s"First set bit at index: $index")
case None => println("No bits are set.")
}
println("All the set bits indexes:")
printSetBitIndexes(bits)
}
}
/*
run:
0100100000101000
First set bit at index: 3
All the set bits indexes:
3 5 11 14
*/