Bird
Raised Fist0
DSA Rustprogramming~20 mins

Reverse Bits of a Number in DSA Rust - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Bit Reversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of reversing bits for 8-bit number 13
What is the output of reversing the bits of the 8-bit number 13 (00001101 in binary)?
DSA Rust
fn reverse_bits(mut n: u8) -> u8 {
    let mut result = 0;
    for _ in 0..8 {
        result <<= 1;
        result |= n & 1;
        n >>= 1;
    }
    result
}

fn main() {
    let num = 13u8;
    let reversed = reverse_bits(num);
    println!("{}", reversed);
}
A176
B134
C104
D91
Attempts:
2 left
💡 Hint
Think about how bits shift from right to left and how the reversed bits form a new number.
❓ Predict Output
intermediate
2:00remaining
Output of reversing bits for 16-bit number 4660
What is the output of reversing the bits of the 16-bit number 4660 (0001001000110100 in binary)?
DSA Rust
fn reverse_bits(mut n: u16) -> u16 {
    let mut result = 0;
    for _ in 0..16 {
        result <<= 1;
        result |= n & 1;
        n >>= 1;
    }
    result
}

fn main() {
    let num = 4660u16;
    let reversed = reverse_bits(num);
    println!("{}", reversed);
}
A13344
B13330
C13312
D11336
Attempts:
2 left
💡 Hint
Reverse the bits carefully and convert back to decimal.
🔧 Debug
advanced
2:00remaining
Identify the error in this bit reversal code
What error does this Rust code produce when reversing bits of a u8 number?
DSA Rust
fn reverse_bits(mut n: u8) -> u8 {
    let mut result = 0;
    for _ in 0..8 {
        result <<= 1;
        result |= n & 1;
        n >>= 1;
    }
    result
}

fn main() {
    let num = 5u8;
    let reversed = reverse_bits(num);
    println!("{}", reversed);
}
ANo error, prints 160
BRuntimeError: integer overflow
CSyntaxError: expected `;` after expression
DTypeError: mismatched types
Attempts:
2 left
💡 Hint
Check if all statements end properly in Rust syntax.
❓ Predict Output
advanced
2:00remaining
Output of reversing bits for 32-bit number 4294967295
What is the output of reversing the bits of the 32-bit number 4294967295 (all bits set to 1)?
DSA Rust
fn reverse_bits(mut n: u32) -> u32 {
    let mut result = 0;
    for _ in 0..32 {
        result <<= 1;
        result |= n & 1;
        n >>= 1;
    }
    result
}

fn main() {
    let num = 4294967295u32;
    let reversed = reverse_bits(num);
    println!("{}", reversed);
}
A2147483647
B4294967295
C0
D1
Attempts:
2 left
💡 Hint
All bits set to 1 reversed remain the same.
🧠 Conceptual
expert
2:00remaining
Why is reversing bits useful in algorithms?
Which of the following is the best reason why reversing bits of a number is useful in algorithms?
AIt is used in fast Fourier transform algorithms to reorder data efficiently.
BIt helps in optimizing multiplication by powers of two.
CIt allows converting decimal numbers to hexadecimal faster.
DIt is mainly used to compress data by reducing bit length.
Attempts:
2 left
💡 Hint
Think about algorithms that require bit-reversed ordering.

Practice

(1/5)
1. What does the operation of reversing bits of a number mean in simple terms?
easy
A. Adding 1 to the binary number
B. Changing all 0s to 1s and 1s to 0s
C. Flipping the order of bits from left to right
D. Shifting bits to the left by one position

Solution

  1. Step 1: Understand bit representation

    Bits are the 0s and 1s that represent a number in binary form.
  2. Step 2: Define reversing bits

    Reversing bits means reading the bits from right to left instead of left to right, effectively flipping their order.
  3. Final Answer:

    Flipping the order of bits from left to right -> Option C
  4. Quick Check:

    Reverse bits = flip order [OK]
Hint: Reverse bits means flip their order, not invert values [OK]
Common Mistakes:
  • Confusing reversing bits with bitwise NOT (inverting bits)
  • Thinking reversing means shifting bits
  • Assuming reversing adds or subtracts from the number
2. Which Rust code snippet correctly reverses the bits of a 4-bit unsigned integer n?
easy
A. let mut rev = 0; for _ in 0..4 { rev <<= 1; rev |= n & 1; n >>= 1; }
B. let mut rev = 0; for _ in 0..4 { rev |= n & 1; rev <<= 1; n >>= 1; }
C. let mut rev = 0; for _ in 0..4 { rev += n & 1; n <<= 1; }
D. let mut rev = 0; for _ in 0..4 { rev <<= 1; rev |= n << 1; n >>= 1; }

Solution

  1. Step 1: Analyze bit reversal logic

    We shift rev left by 1, add the least significant bit of n, then shift n right by 1.
  2. Step 2: Check each option

    let mut rev = 0; for _ in 0..4 { rev <<= 1; rev |= n & 1; n >>= 1; } correctly does rev <<= 1; rev |= n & 1; n >>= 1; in loop. Others have wrong order or operations.
  3. Final Answer:

    let mut rev = 0; for _ in 0..4 { rev <<= 1; rev |= n & 1; n >>= 1; } -> Option A
  4. Quick Check:

    Shift rev left, add bit, shift n right [OK]
Hint: Shift rev left before adding bit, shift n right after [OK]
Common Mistakes:
  • Adding bit before shifting rev left
  • Shifting n left instead of right
  • Using addition instead of bitwise OR
3. What is the output of the following Rust code snippet?
fn reverse_bits(mut n: u8) -> u8 {
    let mut rev = 0;
    for _ in 0..8 {
        rev <<= 1;
        rev |= n & 1;
        n >>= 1;
    }
    rev
}

fn main() {
    let num = 13u8; // binary 00001101
    println!("{}", reverse_bits(num));
}
medium
A. 176
B. 11
C. 101
D. 208

Solution

  1. Step 1: Convert 13 to binary and reverse bits

    13 in 8 bits is 00001101. Reversing bits gives 10110000.
  2. Step 2: Convert reversed bits back to decimal

    10110000 binary equals 128+32+16=176 decimal.
  3. Final Answer:

    176 -> Option A
  4. Quick Check:

    00001101 reversed = 10110000 = 176 [OK]
Hint: Reverse bits visually, then convert binary to decimal [OK]
Common Mistakes:
  • Not using 8 bits, missing leading zeros
  • Confusing bit order or reversing incorrectly
  • Calculating decimal value wrong
4. Identify the bug in this Rust function that attempts to reverse bits of a 4-bit number:
fn reverse_bits(mut n: u8) -> u8 {
    let mut rev = 0;
    for _ in 0..4 {
        rev |= n & 1;
        rev <<= 1;
        n >>= 1;
    }
    rev
}
medium
A. Using bitwise OR instead of addition
B. Shifting rev left after adding bit causes incorrect result
C. Not shifting n left instead of right
D. Loop should run 8 times for 4-bit number

Solution

  1. Step 1: Analyze order of operations in loop

    rev |= n & 1 adds bit, then rev <<= 1 shifts left, causing last bit to be zeroed out.
  2. Step 2: Correct order is shift rev left first, then add bit

    Shifting rev left after adding bit loses the last bit added, so order must be reversed.
  3. Final Answer:

    Shifting rev left after adding bit causes incorrect result -> Option B
  4. Quick Check:

    Shift rev left before OR bit [OK]
Hint: Shift rev left before OR bit to avoid losing bits [OK]
Common Mistakes:
  • Adding bit before shifting rev left
  • Loop count mismatch for bit size
  • Shifting n left instead of right
5. Given a 16-bit unsigned integer, how would you efficiently reverse its bits using Rust's built-in methods combined with bitwise operations?
hard
A. Manually loop 16 times shifting bits and reconstruct reversed number
B. Use n.swap_bytes() to reverse bits
C. Convert number to string, reverse characters, then parse back
D. Use n.reverse_bits() method directly on the number

Solution

  1. Step 1: Know Rust's built-in bit reversal

    Rust's primitive integer types have a reverse_bits() method that reverses bits efficiently.
  2. Step 2: Compare options

    Use n.reverse_bits() method directly on the number uses the built-in method directly, which is efficient and simple. Others are manual or incorrect methods.
  3. Final Answer:

    Use n.reverse_bits() method directly on the number -> Option D
  4. Quick Check:

    Use built-in reverse_bits() for efficiency [OK]
Hint: Use built-in reverse_bits() method for fast bit reversal [OK]
Common Mistakes:
  • Trying manual loops instead of built-in method
  • Confusing byte swap with bit reversal
  • Using string conversion which is inefficient
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