写一个函数实现整数的二进制位模式从左到右翻转
Posted The Ocean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个函数实现整数的二进制位模式从左到右翻转相关的知识,希望对你有一定的参考价值。
如:
在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 }
以上是关于写一个函数实现整数的二进制位模式从左到右翻转的主要内容,如果未能解决你的问题,请参考以下文章
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否函数该整数。 ```java publi(代码
输出 10000 至 99999 中所有的回文数(回文数是指从左到右读与从右到左读都一样的正整数,如 11,22,3443,94349 等)