package main
import (
"fmt"
"strconv"
)
const bitSize = 16
// Print binary representation of the bits
func printBinary(bits uint16) {
binary := strconv.FormatUint(uint64(bits), 2)
fmt.Println(fmt.Sprintf("%0*s", bitSize, binary))
}
// Find the first set bit (least significant)
func findFirstSetBit(bits uint16) int {
for i := 0; i < bitSize; i++ {
if bits & (1 << i) != 0 {
return i
}
}
return -1 // No bits set
}
func printSetBitIndexes(bits uint16) {
for i := 0; i < bitSize; i++ {
if bits & (1 << i) != 0 {
fmt.Printf("%d ", i)
}
}
fmt.Println()
}
func main() {
var bits uint16 = 0
bits |= 1 << 3
bits |= 1 << 5
bits |= 1 << 11
bits |= 1 << 14
printBinary(bits)
fmt.Println("First set bit at index:", findFirstSetBit(bits))
fmt.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
*/