object ZeroBitsEveryStep {
/*
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, ...
*/
def zeroBitsEveryStep(number: Int, step: Int): Int = {
var result = number
var pos = 0
while (pos < 32) {
val mask = 1 << pos
// If the bit is 1, zero it
if ((result & mask) != 0)
result &= ~mask
pos += step
}
result
}
/*
printBinary(n)
--------------
Prints a 32-bit binary representation of an integer.
Scala does not support zero‑padded binary in f-strings,
so we pad manually.
*/
def printBinary(n: Int): Unit = {
val s = n.toBinaryString.reverse.padTo(32, '0').reverse
val grouped = s.grouped(4).mkString(" ")
println(grouped)
}
def main(args: Array[String]): Unit = {
val number = 536870911 // 0001 1111 1111 1111 1111 1111 1111 1111
val step = 3 // zero bits 0, 3, 6, 9, ...
println("Original number in binary:")
printBinary(number)
val result = zeroBitsEveryStep(number, step)
println(s"\nNumber after zeroing every $step bits (only if bit was 1):")
printBinary(result)
println(s"\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
*/