int a = 12; // binary: 1100 int b = 10; // binary: 1010 int c = a & b; Console.WriteLine(c);
12 in binary is 1100 and 10 is 1010. Bitwise AND compares bits: 1&1=1, 1&0=0, 0&1=0, 0&0=0. So result is 1000 in binary which is 8 decimal.
Check carefully each bit position.
int x = 5; // binary: 0101 int y = x << 2; Console.WriteLine(y);
5 in binary is 0101. Left shifting by 2 moves bits two places left: 0101 becomes 010100 which is 20 decimal.
int p = 14; // binary: 1110 int q = 9; // binary: 1001 int r = p ^ q; Console.WriteLine(r);
14 (1110) XOR 9 (1001) compares bits: 1^1=0, 1^0=1, 1^0=1, 0^1=1. Result is 0111 binary which is 7 decimal.
int n = 0; int m = ~n; Console.WriteLine(m);
0 in binary is all zeros. Applying NOT flips all bits to 1. In 32-bit signed integers, this is -1.
int a = 6; // binary: 0110 int b = 3; // binary: 0011 int c = (a | b) & (~a << 1); Console.WriteLine(c);
a | b = 0110 | 0011 = 0111 (7 decimal)
~a = ~0110 = 1001 (in 4 bits, but in 32-bit signed int it's more complex, but for bits 4 least significant bits: 1001)
~a << 1 shifts 1001 left by 1: 10010 (binary 18 decimal)
Now (a | b) & (~a << 1) = 0111 & 10010 = 00010 (binary 2 decimal)
