#include <stdio.h>
#include <stdint.h>
/*
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, ...
*/
int zeroBitsEveryStep(int number, int step) {
int result = number;
for (int pos = 0; pos < 32; pos += step) {
int mask = 1 << pos;
// If the bit is 1, zero it
if (result & mask) {
result &= ~mask;
}
}
return result;
}
/*
printBinary(n)
--------------
Prints a 32-bit binary representation of an integer.
*/
void printBinary(int n) {
for (int i = 31; i >= 0; i--) {
int bit = (n >> i) & 1;
printf("%d", bit);
if (i % 4 == 0) printf(" ");
}
}
int main() {
int number = 536870911; // 0001 1111 1111 1111 1111 1111 1111 1111
int step = 3; // zero bits 0, 3, 6, 9, ...
printf("Original number in binary:\n");
printBinary(number);
int result = zeroBitsEveryStep(number, step);
printf("\n\nNumber after zeroing every %d bits (only if bit was 1):\n", step);
printBinary(result);
printf("\n\nResult as integer: %d\n", result);
return 0;
}
/*
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
*/