How to zero every n-bit from a number if that bit is 1 in C

1 Answer

0 votes
#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

*/

 



answered 17 hours ago by avibootz
...