#
# zero_bits_every_step(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 zero_bits_every_step(number, step)
result = number
pos = 0
while pos < 32
mask = 1 << pos
# If the bit is 1, zero it
if (result & mask) != 0
result &= ~mask
end
pos += step
end
result
end
#
# print_binary(n)
# ---------------
# Prints a 32-bit binary representation of an integer.
#
def print_binary(n)
s = n.to_s(2).rjust(32, "0")
grouped = s.chars.each_slice(4).map(&:join).join(" ")
puts grouped
end
# Main program
number = 536_870_911 # 0001 1111 1111 1111 1111 1111 1111 1111
step = 3 # zero bits 0, 3, 6, 9, ...
puts "Original number in binary:"
print_binary(number)
result = zero_bits_every_step(number, step)
puts "\nNumber after zeroing every #{step} bits (only if bit was 1):"
print_binary(result)
puts "\nResult as integer: #{result}"
=begin
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
=end