What if you could flip the entire binary code of a number in just a few lines of code?
Why Reverse Bits of a Number in DSA Typescript?
Imagine you have a long row of light switches representing bits in a number. You want to flip their order so the first switch becomes the last, the second becomes the second last, and so on.
Doing this by hand means checking each switch one by one and moving it to the new position, which is slow and confusing.
Manually reversing bits means you must track each bit's position and carefully move it to the opposite side. This is error-prone because it's easy to lose track or mix up positions.
Also, doing this for large numbers takes a lot of time and effort, making it impractical.
Using a simple algorithm, we can reverse bits by shifting and masking bits one by one in a loop. This method is fast, reliable, and easy to implement in code.
It automates the process, so you don't have to think about each bit's position manually.
let reversed = 0; // Manually check each bit and set reversed accordingly if (num & 1) reversed |= 1 << 31; if (num & 2) reversed |= 1 << 30; // ... and so on for all 32 bits
let reversed = 0; for (let i = 0; i < 32; i++) { reversed <<= 1; reversed |= (num & 1); num >>>= 1; }
This lets you quickly flip the bit order of any number, enabling tasks like data encoding, graphics processing, and network communication where bit order matters.
In image processing, reversing bits can help flip pixel data for certain formats or hardware that expect bits in reverse order.
Manual bit reversal is slow and error-prone.
Algorithmic bit reversal uses shifting and masking to automate the process.
This technique is useful in many computer science and engineering tasks.
Practice
Solution
Step 1: Understand bit order
Bits are arranged from left (most significant) to right (least significant).Step 2: Reverse means flip order
Reversing bits means the leftmost bit becomes rightmost, second leftmost becomes second rightmost, and so on.Final Answer:
Flipping the order of all bits from left to right -> Option BQuick Check:
Reverse bits = flip order [OK]
- Thinking reversing bits means changing 0 to 1
- Confusing reversing bits with shifting bits
- Assuming reversing bits adds or subtracts from number
n?Solution
Step 1: Analyze bit extraction and placement
let result = 0; for(let i=0; i<8; i++) { result |= ((n >> i) & 1) << (7 - i); } extracts each bit from right to left and places it reversed from left to right correctly.Step 2: Check other options
A extracts LSBs but places them starting from low bits (original order); B uses left shift for extraction which fails to get bits properly; C uses arithmetic + instead of bitwise | and builds original order.Final Answer:
let result = 0; for(let i=0; i<8; i++) { result |= ((n >> i) & 1) << (7 - i); } -> Option AQuick Check:
Right shift and left place = correct reverse [OK]
- Using left shift to extract bits instead of right shift
- Not reversing the bit position when placing
- Adding bits instead of using bitwise OR
function reverseBits(n: number): number {
let result = 0;
for (let i = 0; i < 4; i++) {
result |= ((n >> i) & 1) << (3 - i);
}
return result;
}
console.log(reverseBits(6));Solution
Step 1: Convert 6 to 4-bit binary
6 in binary (4 bits) is 0110.Step 2: Reverse bits
Bits from LSB: 0,1,1,0. Reversed positions yield 0,1,1,0 reversed is 0110 reversed to 0110 reversed is 0110? Actually reversed bits are 0110 reversed to 0110? Let's check carefully.Step 3: Dry run code
i=0: (6 >> 0) & 1 = 0 << 3 = 0
i=1: (6 >> 1) & 1 = 1 << 2 = 4 (result=4)
i=2: (6 >> 2) & 1 = 1 << 1 = 2 (result=6)
i=3: (6 >> 3) & 1 = 0 << 0 = 0 (result=6)Step 4: Check if output matches options
Output is 6, but 9 is 9, 6 is 6.Final Answer:
6 -> Option AQuick Check:
Reverse bits of 6 (0110) = 6 [OK]
- Confusing bit positions when reversing
- Assuming reversed bits always change the number
- Miscounting bits or loop range
function reverseBits(n: number): number {
let result = 0;
for (let i = 0; i <= 8; i++) {
result |= ((n >> i) & 1) << (7 - i);
}
return result;
}Solution
Step 1: Check loop range
The loop runs from i = 0 to i = 8 inclusive, so 9 iterations total, but 8-bit numbers have bits 0 to 7 only.Step 2: Effect of extra iteration
At i=8, shifting by (7 - 8) = -1 is invalid and causes incorrect behavior or runtime error.Final Answer:
Loop runs one extra time causing incorrect bit shift -> Option DQuick Check:
Loop should run 8 times, not 9 [OK]
- Using <= instead of < in loop condition
- Ignoring negative shift values
- Initializing result incorrectly
Solution
Step 1: Reverse bits of the number
Use a loop to reverse bits of the 16-bit number to get reversedNum.Step 2: Check palindrome property
To check if reversedNum is palindrome, reverse reversedNum again and compare with reversedNum itself.Step 3: Reasoning
If reversedNum equals its own reverse, it is a palindrome in binary.Final Answer:
Reverse bits using a loop, then check if reversed number equals its own reverse -> Option CQuick Check:
Palindrome check = reversedNum == reverse(reversedNum) [OK]
- Comparing reversed number to original instead of itself
- Not reversing reversed number for palindrome check
- Assuming original number palindrome means reversed number palindrome
Ready to prove it?
Pass the test and this pattern moves unknown
