Problem: Given an unsigned integer, reverse all bits of it and return the number with reversed bits.
For example:
For example:
Input: n = 43261596 Output: 964176192 The binary representation of 43261596 is 00000010100101000001111010011100. Reversing the bits we get, 00111001011110000010100101000000 which is equivalent to 964176192. Input: n = 1 Output: 2147483648 The binary representation of 43261596 is 00000000000000000000000000000001. Reversing the bits we get, 10000000000000000000000000000000 which is equivalent to 2147483648.The easiest and most efficient approach is reversing bit by bit.
#include <bits/stdc++.h> using namespace std; /* function return the reversed bits integer */ unsigned int revBits(unsigned int num) { unsigned rev_num = 0; int siz = sizeof(num) * 8; for (int i = 0; i < siz; i++) { rev_num <<= 1; rev_num |= num & 1; num >>= 1; } return rev_num; } /* driver function */ int main() { int unsigned a; a = 1; cout<<revBits(a)<<"\n"; a = 105; cout<<revBits(a)<<"\n"; return 0; }Output:
2147483648 2516582400Time Complexity: O(logn) and Space Complexity: O(1)