What if flipping the order of bits could be done as easily as flipping a switch?
Why Reverse Bits of a Number in DSA Go?
Imagine you have a number represented in binary, like a row of light switches that can be on or off. You want to flip the order of these switches so the first becomes last and the last becomes first.
Doing this by hand means checking each switch one by one and moving it to the opposite end, which is slow and confusing.
Manually reversing bits means looking at each bit, remembering its position, and placing it in the new position. This is error-prone and takes a lot of time, especially for large numbers.
It's like trying to reverse a long string of beads one by one without a tool -- easy to lose track or make mistakes.
Using a simple algorithm, we can automatically reverse the bits by shifting and masking bits in a loop. This method is fast, reliable, and works for any number size.
It's like having a machine that flips the entire row of switches perfectly in one go.
var reversed uint32 = 0 for i := 0; i < 32; i++ { bit := (num >> i) & 1 reversed |= bit << (31 - i) }
func reverseBits(num uint32) uint32 {
var reversed uint32 = 0
for i := 0; i < 32; i++ {
reversed <<= 1
reversed |= num & 1
num >>= 1
}
return reversed
}This lets us quickly and correctly reverse the bit order of any number, enabling tasks like data encoding, cryptography, and low-level hardware control.
In network communication, reversing bits is used to convert data between different formats or protocols that expect bits in opposite orders.
Manual bit reversal is slow and error-prone.
Algorithmic bit reversal uses shifting and masking to automate the process.
This operation is essential in systems programming and data processing.
Practice
Solution
Step 1: Understand bit representation
Numbers are stored as bits (0s and 1s) in a sequence from left (most significant) to right (least significant).Step 2: Define reversing bits
Reversing bits means taking the bit sequence and flipping it so the first bit becomes last, second becomes second last, and so on.Final Answer:
Flipping the order of bits from left to right -> Option BQuick Check:
Reverse bits = flip order [OK]
- Confusing reversing bits with bitwise NOT (flip 0s and 1s)
- Thinking reversing bits means adding or subtracting
- Mixing reversing bits with shifting bits
n?Solution
Step 1: Analyze bit reversal logic
We shift rev left to make space, add the least significant bit of n, then shift n right to process next bit.Step 2: Check code correctness
var rev uint8 = 0 for i := 0; i < 8; i++ { rev <<= 1 rev |= n & 1 n >>= 1 } correctly shifts rev left, ORs with n's last bit, then shifts n right. Others either shift wrong direction or add bits incorrectly.Final Answer:
The code in A correctly reverses bits -> Option DQuick Check:
Shift rev left + add n's LSB + shift n right = correct [OK]
- Shifting rev right instead of left
- Shifting n left instead of right
- Adding bits without shifting rev
func reverseBits(n uint8) uint8 {
var rev uint8 = 0
for i := 0; i < 8; i++ {
rev <<= 1
rev |= n & 1
n >>= 1
}
return rev
}
fmt.Println(reverseBits(13))Note: 13 in binary is 00001101.
Solution
Step 1: Convert 13 to binary and reverse bits
13 in 8 bits: 00001101. Reversing bits: 10110000.Step 2: Convert reversed bits back to decimal
10110000 binary = 128 + 32 + 16 = 176 decimal.Final Answer:
176 -> Option AQuick Check:
Reverse(00001101) = 10110000 = 176 [OK]
- Confusing bit order and reversing incorrectly
- Calculating decimal from wrong binary
- Ignoring leading zeros in 8-bit representation
func reverse4Bits(n uint8) uint8 {
var rev uint8 = 0
for i := 0; i < 4; i++ {
rev |= (n & 1) << i
n >>= 1
}
return rev
}Solution
Step 1: Understand the code logic
The code shifts bits of n right, then sets rev bits by shifting left by i, which copies bits in same order.Step 2: Identify why bits are not reversed
Reversing bits requires shifting rev left each time and adding n's last bit, not shifting by i.Final Answer:
The bits are not reversed; they are copied in the same order -> Option CQuick Check:
Shifting rev by i copies bits, not reverses [OK]
- Confusing bit copying with reversing
- Wrong loop count for bit size
- Incorrect variable types for bits
Solution
Step 1: Reverse bits of the number
Use a loop to reverse all 16 bits to get reversed number.Step 2: Check if reversed number is a palindrome
To verify if reversed reads the same forwards and backwards, compute reverse(reversed) and check if it equals reversed. Since reverse(reversed) = original, this is equivalent to comparing reversed with original.Final Answer:
Reverse bits using a loop, then compare reversed number with original -> Option AQuick Check:
reversed == original iff reversed is palindrome [OK]
- Double reversing and comparing to original (always true, doesn't check palindrome)
- Trying to check equality without computing the reverse
- Using shifting without proper bit reversal
Ready to prove it?
Pass the test and this pattern moves unknown
