Solution
-- Get each bit in the integer and set corresponding bit in the return
Question
Reverse each bit in an integer
#include <iostream>
using namespace std;
unsigned int reverse_bits(unsigned int num)
{
int len = sizeof(unsigned int) * 8;
int pos = 0;
unsigned int one = 1;
unsigned int ret = 0;
while(pos < len){
if(num & (1 << pos)){
ret |= (1 << (len - pos -1));
}
pos ++;
}
return ret;
}
int main(int argc, char* argv[])
{
int i;
for(i = 0; i < 100; ++i){
cout << hex << i << " after reverse is " << reverse_bits(i) << endl;
}
return 0;
}
Output
0 after reverse is 0
1 after reverse is 80000000
2 after reverse is 40000000
3 after reverse is c0000000
4 after reverse is 20000000
5 after reverse is a0000000
6 after reverse is 60000000
7 after reverse is e0000000
8 after reverse is 10000000
9 after reverse is 90000000
a after reverse is 50000000
b after reverse is d0000000
c after reverse is 30000000
d after reverse is b0000000
e after reverse is 70000000
f after reverse is f0000000
10 after reverse is 8000000
11 after reverse is 88000000
12 after reverse is 48000000
13 after reverse is c8000000
14 after reverse is 28000000
15 after reverse is a8000000
16 after reverse is 68000000
17 after reverse is e8000000
18 after reverse is 18000000
19 after reverse is 98000000
1a after reverse is 58000000
1b after reverse is d8000000
1c after reverse is 38000000
1d after reverse is b8000000
1e after reverse is 78000000
1f after reverse is f8000000
20 after reverse is 4000000
21 after reverse is 84000000
22 after reverse is 44000000
23 after reverse is c4000000
24 after reverse is 24000000
25 after reverse is a4000000
26 after reverse is 64000000
27 after reverse is e4000000
28 after reverse is 14000000
29 after reverse is 94000000
2a after reverse is 54000000
2b after reverse is d4000000
2c after reverse is 34000000
2d after reverse is b4000000
2e after reverse is 74000000
2f after reverse is f4000000
30 after reverse is c000000
31 after reverse is 8c000000
32 after reverse is 4c000000
33 after reverse is cc000000
34 after reverse is 2c000000
35 after reverse is ac000000
36 after reverse is 6c000000
37 after reverse is ec000000
38 after reverse is 1c000000
39 after reverse is 9c000000
3a after reverse is 5c000000
3b after reverse is dc000000
3c after reverse is 3c000000
3d after reverse is bc000000
3e after reverse is 7c000000
3f after reverse is fc000000
40 after reverse is 2000000
41 after reverse is 82000000
42 after reverse is 42000000
43 after reverse is c2000000
44 after reverse is 22000000
45 after reverse is a2000000
46 after reverse is 62000000
47 after reverse is e2000000
48 after reverse is 12000000
49 after reverse is 92000000
4a after reverse is 52000000
4b after reverse is d2000000
4c after reverse is 32000000
4d after reverse is b2000000
4e after reverse is 72000000
4f after reverse is f2000000
50 after reverse is a000000
51 after reverse is 8a000000
52 after reverse is 4a000000
53 after reverse is ca000000
54 after reverse is 2a000000
55 after reverse is aa000000
56 after reverse is 6a000000
57 after reverse is ea000000
58 after reverse is 1a000000
59 after reverse is 9a000000
5a after reverse is 5a000000
5b after reverse is da000000
5c after reverse is 3a000000
5d after reverse is ba000000
5e after reverse is 7a000000
5f after reverse is fa000000
60 after reverse is 6000000
61 after reverse is 86000000
62 after reverse is 46000000
63 after reverse is c6000000