package main
import (
"fmt"
"strings"
)
/*
zeroBitsEveryStep(number, step)
-------------------------------
Zeros every `step`-th bit (0-based from LSB)
but only if that bit is currently 1.
Example:
number = 536870911
step = 3 → zero bits 0, 3, 6, 9, ...
*/
func zeroBitsEveryStep(number int, step int) int {
result := number
for pos := 0; pos < 32; pos += step {
mask := 1 << pos
// If the bit is 1, zero it
if (result & mask) != 0 {
result &= ^mask
}
}
return result
}
/*
printBinary(n)
--------------
Prints a 32-bit binary representation of an integer.
*/
func printBinary(n int) {
s := fmt.Sprintf("%032b", n)
var out strings.Builder
for i := 0; i < 32; i++ {
out.WriteByte(s[i])
if (i+1)%4 == 0 {
out.WriteString(" ")
}
}
fmt.Println(out.String())
}
func main() {
number := 536870911 // 0001 1111 1111 1111 1111 1111 1111 1111
step := 3 // zero bits 0, 3, 6, 9, ...
fmt.Println("Original number in binary:")
printBinary(number)
result := zeroBitsEveryStep(number, step)
fmt.Println("\nNumber after zeroing every", step, "bits (only if bit was 1):")
printBinary(result)
fmt.Println("\nResult as integer:", result)
}
/*
run:
Original number in binary:
0001 1111 1111 1111 1111 1111 1111 1111
Number after zeroing every 3 bits (only if bit was 1):
0001 0110 1101 1011 0110 1101 1011 0110
Result as integer: 383479222
*/