编写函数unsigned int reverse_bit(unsigned int value),实现无符号二进制整数在32位机器上的bit位翻转
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
方法一
编程思路:
1、键入要翻转的整数;
2、调用函数unsigned int reverse_bit(unsigned int value),实现翻转;
2.1、采用循环,遍历value的每一个bit位;
2.2、把第i个bit位设为1;
2.3、value每次右移一位。
3、打印结果。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
unsigned int reverse_bit(unsigned int value) {
int n = 0;
int i = 0;
for (i = 31; i > 0; i--) {
if (value & 1) {
n = n | (1 << i);
}
value = (value >> 1);
}
return n;
}
int main() {
int value;
printf("请输入要翻转的整数:");
scanf("%d", &value);
if (value != 0) {
printf("%u", reverse_bit(value));
}
system("pause");
return 0;
}
方法二
编程思路:
1、首先键入要翻转的整数;
2、其次是调用unsigned int round(unsigned int a)函数,采用之前谈到的回文数的方法,将这个数字按二进制翻转即可。https://mp.csdn.net/postedit/88911882
3、打印翻转后的数字,采用%u打印,无符号整数。
具体代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
unsigned int round(unsigned int a) {
unsigned int tmp, sum = 0;
for (int i = 0; i < 32; i++, a /= 2) {
tmp = a % 2;
sum = sum * 2 + tmp;
}
return sum;
}
int main() {
int a;
printf("请输入要翻转的整数:\n");
scanf("%d", &a);
printf("翻转后的整数为:%u\n", round(a));
system("pause");
return 0;
}