Search code examples
c#.netbitvector

What does the CreateMask function of BitVector32 do?


What does the CreateMask() function of BitVector32 do? I did not get what a Mask is.

Would like to understand the following lines of code. Does create mask just sets bit to true?

  // Creates and initializes a BitVector32 with all bit flags set to FALSE.
  BitVector32 myBV = new BitVector32( 0 );

  // Creates masks to isolate each of the first five bit flags.
  int myBit1 = BitVector32.CreateMask();
  int myBit2 = BitVector32.CreateMask( myBit1 );
  int myBit3 = BitVector32.CreateMask( myBit2 );
  int myBit4 = BitVector32.CreateMask( myBit3 );
  int myBit5 = BitVector32.CreateMask( myBit4 );

  // Sets the alternating bits to TRUE.
  Console.WriteLine( "Setting alternating bits to TRUE:" );
  Console.WriteLine( "   Initial:         {0}", myBV.ToString() );
  myBV[myBit1] = true;
  Console.WriteLine( "   myBit1 = TRUE:   {0}", myBV.ToString() );
  myBV[myBit3] = true;
  Console.WriteLine( "   myBit3 = TRUE:   {0}", myBV.ToString() );
  myBV[myBit5] = true;
  Console.WriteLine( "   myBit5 = TRUE:   {0}", myBV.ToString() );

What is the practical application of this?


Solution

  • BitVector32.CreateMask() is a substitution for the left shift operator (<<) which in most cases results in multiplication by 2 (left shift is not circular, so you may start loosing digits, more is explained here)

    BitVector32 vector = new BitVector32();
    int bit1 = BitVector32.CreateMask();
    int bit2 = BitVector32.CreateMask(bit1);
    int bit3 = 1 << 2;
    int bit5 = 1 << 4;
    
    Console.WriteLine(vector.ToString());
    vector[bit1 | bit2 | bit3 | bit5] = true;
    Console.WriteLine(vector.ToString());
    

    Output:

    BitVector32{00000000000000000000000000000000} BitVector32{00000000000000000000000000010111}