写一个函数实现整数的二进制位模式从左到右翻转

如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832

思路:第1位逆转到了第32位->后整数的值为2^31(2的31次方)

      第i位逆转到了第32-i位->后整数的值为2^(32-i)(2的(32-i)次方)*(n>>(i-1))&1

   累加每一位逆转之后的值-->二进制模式从左到右翻转后的值则为程序结果返回值。

 1 //二进制位模式从左到右翻转
 2 #include<stdio.h>
 3 #include<math.h>
 4 #define _CRT_SECURE_NO_WARNINGS
 5 
 6 unsigned int  reverse_bit(unsigned int n)
 7 {
 8     unsigned int num = 0;
 9     int i = 0;
10     for (i = 1;i <= 32;++i)
11     {
12         num += (n >> (i - 1) & 1) * pow(2, 32 - i);
13     }
14     return num;
15 }
16 
17 int main()
18 {
19     //在32位机器上25这个值包含下列各位:
20     //00000000000000000000000000011001
21     //翻转后:(2550136832)
22     //10011000000000000000000000000000
23     //程序结果返回:
24     //2550136832
25     unsigned int n = 0;
26     scanf("%u",&n);
27     printf("%u\n", reverse_bit(n));
28 
29     return 0;
30 }

猜你喜欢

转载自www.cnblogs.com/cuckoo-/p/10363185.html