What does the AND (&) bitwise operator do between two bits?
The AND operator returns 1 only if both bits are 1; otherwise, it returns 0. Example: 1 & 1 = 1, 1 & 0 = 0, 0 & 0 = 0.
Click to reveal answer
beginner
Explain the OR (|) bitwise operator with an example.
The OR operator returns 1 if at least one of the bits is 1; otherwise, it returns 0. Example: 1 | 0 = 1, 0 | 0 = 0.
Click to reveal answer
beginner
What is the result of XOR (^) between two bits?
XOR returns 1 if the bits are different, and 0 if they are the same. Example: 1 ^ 0 = 1, 1 ^ 1 = 0.
Click to reveal answer
beginner
What does the NOT (~) operator do to a bit?
The NOT operator flips the bit: 0 becomes 1, and 1 becomes 0. Example: ~1 = 0, ~0 = 1.
Click to reveal answer
beginner
What is the effect of left shift (<<) and right shift (>>) operators on a number?
Left shift (<<) moves bits to the left, adding zeros on the right, effectively multiplying by 2 for each shift. Right shift (>>) moves bits to the right, discarding bits on the right, effectively dividing by 2 for each shift. Example: 4 << 1 = 8, 8 >> 1 = 4.
Click to reveal answer
What is the result of 5 & 3 in binary? (5 = 0101, 3 = 0011)
A0100
B0111
C0010
D0001
✗ Incorrect
5 (0101) & 3 (0011) = 0001 because only the last bit is 1 in both.
Which operator returns 1 only if exactly one of the bits is 1?
AXOR (^)
BAND (&)
COR (|)
DNOT (~)
✗ Incorrect
XOR returns 1 only when bits differ.
What does the expression 6 << 2 evaluate to?
A12
B24
C3
D8
✗ Incorrect
Left shift by 2 multiplies 6 by 4 (2^2), so 6 << 2 = 24.
What is the binary result of ~0b1010 (4-bit)?
A1111
B1010
C0101
D0000
✗ Incorrect
NOT flips bits: 1010 becomes 0101.
Which operator would you use to clear specific bits in a number?
AAND (&)
BLeft Shift (<<)
CXOR (^)
DOR (|)
✗ Incorrect
AND with 0 clears bits; AND with 1 keeps bits.
Describe how AND, OR, XOR, and NOT operators work on bits with simple examples.
Think about how each operator treats 0 and 1 bits.
You got /4 concepts.
Explain what happens when you apply left shift and right shift operators to a number.
Imagine moving digits in a number left or right.
You got /4 concepts.
Practice
(1/5)
1. What is the result of the bitwise AND operation between 0b1101 and 0b1011?
easy
A. 0b1001
B. 0b1111
C. 0b0101
D. 0b0011
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: Apply AND to each bit of 0b1101 and 0b1011
Bits: 1&1=1, 1&0=0, 0&1=0, 1&1=1, so result is 0b1001.
Final Answer:
0b1001 -> Option A
Quick Check:
1101 & 1011 = 1001 [OK]
Hint: AND keeps bits set only if both are 1 [OK]
Common Mistakes:
Confusing AND with OR operation
Mixing bit positions when calculating
Forgetting binary format in answer
2. Which of the following is the correct Rust syntax to perform a bitwise XOR between variables a and b?
easy
A. let c = a & b;
B. let c = a && b;
C. let c = a ^ b;
D. let c = a | b;
Solution
Step 1: Recall Rust bitwise XOR operator
In Rust, the caret symbol (^) is used for bitwise XOR.
Step 2: Check each option's operator
The options use: & (bitwise AND), && (logical AND), | (bitwise OR), ^ (bitwise XOR). Only ^ is correct.
Final Answer:
let c = a ^ b; -> Option C
Quick Check:
Bitwise XOR in Rust uses ^ [OK]
Hint: XOR uses ^ symbol in Rust [OK]
Common Mistakes:
Using && instead of ^ for XOR
Confusing bitwise OR (|) with XOR
Using logical operators instead of bitwise
3. What is the output of the following Rust code?
let x: u8 = 0b0011_1100;
let y: u8 = 0b0000_1101;
let z = x | y;
println!("{:08b}", z);
medium
A. 00111101
B. 00110001
C. 00001101
D. 00111100
Solution
Step 1: Understand bitwise OR operation
Bitwise OR returns 1 if at least one bit is 1 in either number.
Step 2: Apply OR to each bit of x and y
x = 00111100, y = 00001101; OR bits: 0|0=0,0|0=0,1|0=1,1|0=1,1|1=1,1|1=1,0|0=0,0|1=1; result = 00111101.
Final Answer:
00111101 -> Option A
Quick Check:
00111100 | 00001101 = 00111101 [OK]
Hint: OR sets bit if either bit is 1 [OK]
Common Mistakes:
Mixing OR with AND operation
Misreading binary digits
Ignoring leading zeros in output
4. Identify the error in this Rust code snippet that attempts to left shift a variable:
let a: u8 = 0b0001_0001;
let b = a << 8
println!("{:08b}", b);
medium
A. Incorrect use of << operator, should be >>
B. Shift amount exceeds variable bit size causing overflow
C. Cannot print binary format with {:08b}
D. Missing semicolon after variable declaration
Solution
Step 1: Check for syntax errors
The declaration 'let b = a << 8' is missing a semicolon (;).
Step 2: Verify other parts
<< is correct for left shift; Rust masks large shift amounts without panic/overflow error; {:08b} works for binary output.
Final Answer:
Missing semicolon after variable declaration -> Option D
Quick Check:
Missing ; after let causes compile error [OK]
Hint: Rust statements must end with semicolon [OK]
Common Mistakes:
Omitting semicolons after let statements
Confusing left shift with right shift
Assuming shifts panic on large amounts
5. Given a 16-bit unsigned integer num, which Rust expression correctly clears (sets to 0) the 5th bit (counting from 0 at the right) without affecting other bits?
hard
A. num | (1 << 5)
B. num & !(1 << 5)
C. num ^ (1 << 5)
D. num << 5
Solution
Step 1: Understand clearing a bit
To clear a bit, use AND with a mask that has 0 at target bit and 1 elsewhere.
Step 2: Create mask for 5th bit
1 << 5 creates a mask with 1 at 5th bit; negating it with ! flips bits, making 0 at 5th bit.