मान लीजिए हमारे पास एक अनसाइन्ड संख्या x है, और हम आसानी से इसका बाइनरी प्रतिनिधित्व ढूंढ सकते हैं (32-बिट अनसाइन्ड पूर्णांक)। हमारा कार्य बिट्स को उल्टा करना है। यदि बाइनरी प्रतिनिधित्व 00000000000000000000001001110100 जैसा है, तो उल्टे बिट्स 00101110010000000000000000000000 होंगे। हमें बिट्स उल्टा करने के बाद वास्तविक संख्या वापस करनी है।
हल करने के चरण
- मान लें n दी गई संख्या है
- answer := 0 मान लें
- i := 31 से 0 तक:
- answer := answer OR (n AND 1), और इसे i बार बाएं शिफ्ट करें
- n := n को 1 बिट दाएं शिफ्ट करने के बाद
- answer वापस करें
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t ans = 0;
for(int i = 31; i >= 0; i--){
ans |= (n & 1) <<i;
n>>=1;
}
return ans;
}
};
main(){
Solution ob;
cout << ob.reverseBits(0b00000000000000000000001001110100);
}
इनपुट
0b00000000000000000000001001110100
आउटपुट
775946240