Bird
Raised Fist0
Cprogramming~5 mins

Bitwise AND, OR, XOR in C

Choose your learning style10 modes available
Introduction

Bitwise AND, OR, and XOR let you work directly with the bits inside numbers. This helps you do fast, low-level operations like turning bits on or off.

Checking if a specific bit in a number is on or off.
Setting or clearing a particular bit in a number.
Combining two numbers bit by bit to create a new number.
Performing simple encryption or toggling bits.
Optimizing performance in low-level programming or embedded systems.
Syntax
C
/* Bitwise operations on integers */
int bitwise_and = a & b;  // AND operation
int bitwise_or = a | b;   // OR operation
int bitwise_xor = a ^ b;  // XOR operation

The operators work on each bit of the numbers separately.

Operands must be integers (int, char, etc.).

Examples
Basic example showing bitwise AND, OR, XOR on two numbers.
C
int a = 6;  // binary 0110
int b = 3;  // binary 0011
int and_result = a & b;  // 2 (0010)
int or_result = a | b;   // 7 (0111)
int xor_result = a ^ b;  // 5 (0101)
Edge case: Using zero and one to see how bits combine.
C
int zero = 0;
int one = 1;
int and_zero = zero & one;  // 0
int or_zero = zero | one;   // 1
int xor_zero = zero ^ one;  // 1
Using all bits set to 1 to see how AND, OR, XOR behave.
C
int all_ones = ~0;  // all bits set to 1
int a = 5;  // 0101
int and_all_ones = a & all_ones;  // 5 (unchanged)
int or_all_ones = a | all_ones;    // -1 (all bits 1)
int xor_all_ones = a ^ all_ones;   // bitwise NOT of a
Sample Program

This program shows how bitwise AND, OR, and XOR work on two numbers. It prints the results so you can see the effect on bits.

C
#include <stdio.h>

int main() {
    int number1 = 12;  // binary 1100
    int number2 = 10;  // binary 1010

    printf("Number1: %d (binary 1100)\n", number1);
    printf("Number2: %d (binary 1010)\n", number2);

    int and_result = number1 & number2;
    int or_result = number1 | number2;
    int xor_result = number1 ^ number2;

    printf("Bitwise AND (number1 & number2): %d\n", and_result);
    printf("Bitwise OR (number1 | number2): %d\n", or_result);
    printf("Bitwise XOR (number1 ^ number2): %d\n", xor_result);

    return 0;
}
OutputSuccess
Important Notes

Time complexity is O(1) because bitwise operations happen directly on CPU registers.

Space complexity is O(1) as no extra memory is needed beyond variables.

Common mistake: Confusing bitwise operators (&, |, ^) with logical operators (&&, ||, !).

Use bitwise operations when you need to manipulate bits directly, not for general true/false logic.

Summary

Bitwise AND (&), OR (|), and XOR (^) work on each bit of integers.

They are useful for checking, setting, or toggling bits efficiently.

Remember: bitwise operators are different from logical operators.

Practice

(1/5)
1. Which bitwise operator in C returns 1 only if both corresponding bits of two numbers are 1?
a & b means:
easy
A. Bitwise AND
B. Bitwise OR
C. Bitwise XOR
D. Logical AND

Solution

  1. Step 1: Understand bitwise AND operation

    Bitwise AND compares each bit of two numbers and returns 1 only if both bits are 1.
  2. Step 2: Compare with other operators

    Bitwise OR returns 1 if either bit is 1, XOR returns 1 if bits differ, and logical AND is different (works on boolean values).
  3. Final Answer:

    Bitwise AND -> Option A
  4. Quick Check:

    AND = & = Bitwise AND [OK]
Hint: AND means both bits must be 1 to get 1 [OK]
Common Mistakes:
  • Confusing bitwise AND with logical AND (&&)
  • Mixing AND with OR or XOR operators
  • Thinking bitwise AND returns 1 if either bit is 1
2. Which of the following is the correct syntax to perform bitwise XOR on two integers a and b in C?
easy
A. a ^ b
B. a && b
C. a | b
D. a & b

Solution

  1. Step 1: Identify bitwise XOR operator

    In C, the caret symbol (^) is used for bitwise XOR operation.
  2. Step 2: Differentiate from other operators

    && is logical AND, | is bitwise OR, & is bitwise AND, so only ^ is XOR.
  3. Final Answer:

    a ^ b -> Option A
  4. Quick Check:

    ^ means XOR in C [OK]
Hint: XOR uses ^ symbol in C [OK]
Common Mistakes:
  • Using && instead of ^ for XOR
  • Confusing | (OR) with ^ (XOR)
  • Using & (AND) instead of ^ (XOR)
3. What is the output of the following C code?
int a = 6;  // binary 0110
int b = 11; // binary 1011
printf("%d", a & b);
medium
A. 3
B. 15
C. 7
D. 2

Solution

  1. Step 1: Convert numbers to binary

    6 in binary is 0110, 11 in binary is 1011.
  2. Step 2: Perform bitwise AND

    0110 & 1011 = 0010 (only bits where both are 1 remain 1).
  3. Step 3: Convert result back to decimal

    0010 in decimal is 2.
  4. Final Answer:

    2 -> Option D
  5. Quick Check:

    6 & 11 = 2 [OK]
Hint: AND keeps bits set in both numbers only [OK]
Common Mistakes:
  • Confusing AND with OR or XOR results
  • Not converting binary back to decimal correctly
  • Mixing up bit positions
4. Identify the error in this C code snippet that tries to perform bitwise OR:
int a = 5;
int b = 9;
int c = a | b;
printf("%d", c);
medium
A. Missing semicolon after variable declarations
B. Incorrect operator used for bitwise OR
C. No error, code will print correct output
D. printf format specifier should be %x for bitwise OR

Solution

  1. Step 1: Check syntax correctness

    All lines have semicolons; operator | is correct for bitwise OR.
  2. Step 2: Verify printf usage

    %d is correct to print integer decimal value; no error present.
  3. Final Answer:

    No error, code will print correct output -> Option C
  4. Quick Check:

    Bitwise OR uses | and %d prints decimal [OK]
Hint: Bitwise OR uses | and %d prints decimal [OK]
Common Mistakes:
  • Thinking | is wrong operator for OR
  • Believing %x is mandatory for bitwise results
  • Missing semicolons (not the case here)
5. Given two integers x = 12 and y = 10, which expression toggles the bits of x where y has bits set, using bitwise XOR?
hard
A. x | y
B. x ^ y
C. x & y
D. ~x ^ y

Solution

  1. Step 1: Understand toggling bits with XOR

    Bitwise XOR toggles bits where the second operand has 1s.
  2. Step 2: Analyze each option

    x & y keeps bits set in both; x | y sets bits set in either; ~x ^ y is unrelated toggling with complement.
  3. Final Answer:

    x ^ y -> Option B
  4. Quick Check:

    XOR toggles bits where second operand has 1 [OK]
Hint: XOR toggles bits where second number has 1s [OK]
Common Mistakes:
  • Using AND or OR instead of XOR for toggling
  • Confusing complement operator ~ with XOR
  • Not understanding toggling effect of XOR
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard