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.
Bitwise AND, OR, XOR in 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.).
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)
int zero = 0; int one = 1; int and_zero = zero & one; // 0 int or_zero = zero | one; // 1 int xor_zero = zero ^ one; // 1
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
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.
#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; }
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.
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
a & b means:Solution
Step 1: Understand bitwise AND operation
Bitwise AND compares each bit of two numbers and returns 1 only if both bits are 1.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).Final Answer:
Bitwise AND -> Option AQuick Check:
AND = & = Bitwise AND [OK]
- Confusing bitwise AND with logical AND (&&)
- Mixing AND with OR or XOR operators
- Thinking bitwise AND returns 1 if either bit is 1
a and b in C?Solution
Step 1: Identify bitwise XOR operator
In C, the caret symbol (^) is used for bitwise XOR operation.Step 2: Differentiate from other operators
&& is logical AND, | is bitwise OR, & is bitwise AND, so only ^ is XOR.Final Answer:
a ^ b -> Option AQuick Check:
^ means XOR in C [OK]
- Using && instead of ^ for XOR
- Confusing | (OR) with ^ (XOR)
- Using & (AND) instead of ^ (XOR)
int a = 6; // binary 0110
int b = 11; // binary 1011
printf("%d", a & b);Solution
Step 1: Convert numbers to binary
6 in binary is 0110, 11 in binary is 1011.Step 2: Perform bitwise AND
0110 & 1011 = 0010 (only bits where both are 1 remain 1).Step 3: Convert result back to decimal
0010 in decimal is 2.Final Answer:
2 -> Option DQuick Check:
6 & 11 = 2 [OK]
- Confusing AND with OR or XOR results
- Not converting binary back to decimal correctly
- Mixing up bit positions
int a = 5;
int b = 9;
int c = a | b;
printf("%d", c);Solution
Step 1: Check syntax correctness
All lines have semicolons; operator | is correct for bitwise OR.Step 2: Verify printf usage
%d is correct to print integer decimal value; no error present.Final Answer:
No error, code will print correct output -> Option CQuick Check:
Bitwise OR uses | and %d prints decimal [OK]
- Thinking | is wrong operator for OR
- Believing %x is mandatory for bitwise results
- Missing semicolons (not the case here)
x = 12 and y = 10, which expression toggles the bits of x where y has bits set, using bitwise XOR?Solution
Step 1: Understand toggling bits with XOR
Bitwise XOR toggles bits where the second operand has 1s.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.Final Answer:
x ^ y -> Option BQuick Check:
XOR toggles bits where second operand has 1 [OK]
- Using AND or OR instead of XOR for toggling
- Confusing complement operator ~ with XOR
- Not understanding toggling effect of XOR
Ready to prove it?
Pass the test and this pattern moves unknown
