C# - Bitwise Operators



C# bitwise operators allow operations at the binary level. These operators are primarily used for performance optimization, low-level programming, encryption, networking, and system programming.

What Are Bitwise Operators in C#?

C# bitwise operators manipulate individual bits of numbers. These operators are commonly used for efficient computations, flag operations, and hardware interactions.

List of C# Bitwise Operators

The Bitwise operators supported by C# are listed in the following table. Assume variable A holds 60 and variable B holds 13, then −

Operator Description Example
& Binary AND Operator copies a bit to the result if it exists in both operands. (A & B) = 12, which is 0000 1100
| Binary OR Operator copies a bit if it exists in either operand. (A | B) = 61, which is 0011 1101
^ Binary XOR Operator copies the bit if it is set in one operand but not both. (A ^ B) = 49, which is 0011 0001
~ Binary Ones Complement Operator is unary and has the effect of 'flipping' bits. (~A ) = -61, which is 1100 0011 in 2's complement due to a signed binary number.
<< Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. A << 2 = 240, which is 1111 0000
>> Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. A >> 2 = 15, which is 0000 1111

Understanding Bitwise Operations with Examples

Example 1: Bitwise AND (&)

Bitwise AND sets each bit to 1 only if both operands have 1 in that position.

using System;

class Program
{
    static void Main()
    {
        int a = 5, b = 3;  // Binary: a = 0101, b = 0011
        int result = a & b; // 0101 & 0011 = 0001 (1)

        Console.WriteLine("Bitwise AND: " + result);
    }
}

When the above code is compiled and executed, it produces the following result −

Bitwise AND: 1

Example 2: Bitwise OR (|)

Bitwise OR sets each bit to 1 if either operand has 1.

using System;

class Program
{
    static void Main()
    {
        int a = 5, b = 3;  // Binary: a = 0101, b = 0011
        int result = a | b; // 0101 | 0011 = 0111 (7)

        Console.WriteLine("Bitwise OR: " + result);
    }
}

When the above code is compiled and executed, it produces the following result −

Bitwise OR: 7

Example 3: Bitwise XOR (^)

Bitwise XOR sets each bit to 1 if the corresponding bits are different.

using System;

class Program
{
    static void Main()
    {
        int a = 5, b = 3;  // Binary: a = 0101, b = 0011
        int result = a ^ b; // 0101 ^ 0011 = 0110 (6)

        Console.WriteLine("Bitwise XOR: " + result);
    }
}

When the above code is compiled and executed, it produces the following result −

Bitwise XOR: 6

Example 4: Bitwise NOT (~)

Bitwise NOT inverts each bit (turns 1 into 0 and vice versa).

using System;

class Program
{
    static void Main()
    {
        int a = 5;         // Binary: 00000101
        int result = ~a;   // NOT 00000101 = 11111010 (Twos Complement)

        Console.WriteLine("Bitwise NOT: " + result);
    }
}

When the above code is compiled and executed, it produces the following result −

Bitwise NOT: -6

Example 5: Left Shift (<<)

Left shift (<<) moves bits left, multiplying the number by 2^n.

using System;

class Program
{
    static void Main()
    {
        int a = 5;        // Binary: 00000101
        int result = a 

When the above code is compiled and executed, it produces the following result −

Left Shift: 20

Example 6: Right Shift (>>)

Right shift (>>) moves bits right, dividing the number by 2^n.

using System;

class Program
{
    static void Main()
    {
        int a = 20;       // Binary: 00010100
        int result = a >> 2; // Right Shift by 2: 00000101 (5)

        Console.WriteLine("Right Shift: " + result);
    }
}

When the above code is compiled and executed, it produces the following result −

Right Shift: 5

Real-World Applications of Bitwise Operators

Example 7: Checking If a Number Is Even or Odd

You can use bitwise AND to determine if a number is even or odd.

using System;

class Program
{
    static void Main()
    {
        int number = 10;

        if ((number & 1) == 0)
            Console.WriteLine("Even");
        else
            Console.WriteLine("Odd");
    }
}

When the above code is compiled and executed, it produces the following result −

Even

Example 8: Swapping Two Numbers Without Using a Temporary Variable

You can use bitwise XOR bitwise operator to swap two numbers without extra memory.

using System;

class Program
{
    static void Main()
    {
        int a = 5, b = 10;

        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

        Console.WriteLine("After Swap: a = " + a + ", b = " + b);
    }
}

When the above code is compiled and executed, it produces the following result −

After Swap: a = 10, b = 5

Common Mistakes & How to Avoid Them

Mistake Issue Solution
a << -1 Negative shift count Use a << 0 or a >> 0
a = a & 0; Always sets a to 0 Ensure a & mask where mask is properly set
b = ~b; Unexpected negative value Understand twos complement representation

Best Practices for Using Bitwise Operators in C#

  • Use bitwise AND (&) for flag operations and bit masking.
  • Use XOR (^) for swapping values efficiently.
  • Use shift operators (<< and >>) for fast multiplication and division by powers of 2.
  • Understand how negative numbers are represented in twos complement format.
Advertisements