码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-11 21:37:01      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:bsp   rev   包含   define   nbsp   --   crt   sign   for   

如:
在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 }

 

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

标签:bsp   rev   包含   define   nbsp   --   crt   sign   for   

原文地址:https://www.cnblogs.com/cuckoo-/p/10363185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!