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

1 Answer

0 votes
using System;

class ZeroBitsEveryStepProgram
{
    /*
        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, ...
    */
    static 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) != 0) {
                result &= ~mask;
            }
        }

        return result;
    }

    /*
        printBinary(n)
        --------------
        Prints a 32-bit binary representation of an integer.
    */
    static void PrintBinary(int n)
    {
        string s = Convert.ToString(n, 2).PadLeft(32, '0');

        for (int i = 0; i < 32; i++) {
            Console.Write(s[i]);
            if ((i + 1) % 4 == 0)
                Console.Write(" ");
        }
    }

    static void Main()
    {
        int number = 536870911;   // 0001 1111 1111 1111 1111 1111 1111 1111
        int step   = 3;           // zero bits 0, 3, 6, 9, ...

        Console.WriteLine("Original number in binary:");
        PrintBinary(number);

        int result = ZeroBitsEveryStep(number, step);

        Console.WriteLine("\n\nNumber after zeroing every " + step +
                          " bits (only if bit was 1):");
        PrintBinary(result);

        Console.WriteLine("\n\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

*/

 



answered 18 hours ago by avibootz
...