📖 Scenario: Imagine you are working with a simple digital device that stores numbers in binary form. Sometimes, you need to reverse the order of bits in a number to decode or transform data correctly.
🎯 Goal: You will write a Go program that takes a number and reverses its bits. For example, if the number is 13 (which is 1101 in binary), reversing the bits will give 11 (which is 1011 in binary).
📋 What You'll Learn
Create a variable called num with the value 13.
Create a variable called bitSize with the value 4 to represent the number of bits to reverse.
Write a loop that reverses the bits of num using bitSize.
Print the reversed number using fmt.Println.
💡 Why This Matters
🌍 Real World
Reversing bits is useful in low-level programming, data encoding, and communication protocols where bit order matters.
💼 Career
Understanding bitwise operations and loops is essential for embedded systems, network programming, and performance-critical software development.
Progress0 / 4 steps
1
Create the number variable
Create a variable called num and set it to 13.
DSA Go
Hint
Use num := 13 to create the variable.
2
Create the bit size variable
Create a variable called bitSize and set it to 4.
DSA Go
Hint
Use bitSize := 4 to create the variable.
3
Reverse the bits of the number
Write a for loop that uses bitSize to reverse the bits of num. Create a variable called reversed initialized to 0. In each loop, shift reversed left by 1, add the last bit of num, then shift num right by 1.
DSA Go
Hint
Use bitwise operators: & to get last bit, << to shift left, and >> to shift right.
4
Print the reversed number
Use fmt.Println to print the value of reversed.
DSA Go
Hint
Use fmt.Println(reversed) to print the reversed bits as a number.
Practice
(1/5)
1. What does reversing the bits of a number mean in simple terms?
easy
A. Shifting bits to the left by one position
B. Flipping the order of bits from left to right
C. Adding 1 to the number
D. Changing all 0s to 1s and 1s to 0s
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 B
Quick Check:
Reverse bits = flip order [OK]
Hint: Reverse bits means flip their order, not flip values [OK]
Common Mistakes:
Confusing reversing bits with bitwise NOT (flip 0s and 1s)
Thinking reversing bits means adding or subtracting
Mixing reversing bits with shifting bits
2. Which Go code snippet correctly reverses bits of a 8-bit unsigned integer n?
easy
A. var rev uint8 = 0
for i := 0; i < 8; i++ {
rev = rev >> 1
rev |= n & 1
n <<= 1
}
B. var rev uint8 = 0
for i := 0; i < 8; i++ {
rev |= (n & 1) << i
n >>= 1
}
C. var rev uint8 = 0
for i := 0; i < 8; i++ {
rev += n & 1
n <<= 1
}
D. var rev uint8 = 0
for i := 0; i < 8; i++ {
rev <<= 1
rev |= n & 1
n >>= 1
}
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 D
Quick Check:
Shift rev left + add n's LSB + shift n right = correct [OK]
Hint: Shift rev left, add n's last bit, shift n right each loop [OK]
Common Mistakes:
Shifting rev right instead of left
Shifting n left instead of right
Adding bits without shifting rev
3. What is the output of this Go code snippet?
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.
medium
A. 176
B. 11
C. 101
D. 208
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 A
Quick Check:
Reverse(00001101) = 10110000 = 176 [OK]
Hint: Reverse bits visually, then convert binary to decimal [OK]
Common Mistakes:
Confusing bit order and reversing incorrectly
Calculating decimal from wrong binary
Ignoring leading zeros in 8-bit representation
4. Find the error in this Go function that tries to reverse bits of a 4-bit number:
func reverse4Bits(n uint8) uint8 {
var rev uint8 = 0
for i := 0; i < 4; i++ {
rev |= (n & 1) << i
n >>= 1
}
return rev
}
medium
A. The shift operator should be >> instead of <<
B. The loop should run 8 times for 4-bit numbers
C. The bits are not reversed; they are copied in the same order
D. Variable rev should be int, not uint8
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 C
Quick Check:
Shifting rev by i copies bits, not reverses [OK]
Hint: Shift rev left each loop to reverse bits, not shift by i [OK]
Common Mistakes:
Confusing bit copying with reversing
Wrong loop count for bit size
Incorrect variable types for bits
5. You want to reverse bits of a 16-bit unsigned integer and then check if the reversed number is a palindrome in binary (reads same forwards and backwards). Which approach is correct?
hard
A. Reverse bits using a loop, then compare reversed number with original
B. Reverse bits using a loop, then reverse again and compare with original
C. Check if original number equals reversed number without reversing bits
D. Shift bits left and right alternately without reversing
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 A
Quick Check:
reversed == original iff reversed is palindrome [OK]
Hint: Reverse once, then compare reversed with original [OK]
Common Mistakes:
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
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.