如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value) {
//定义一个数组保存value的二进制序列
//注意,取下来的二进制位与数组下标正好相反,即a[0]存放的是第32位,a[31]存放的是第一位
int arr[32] = { 0 };
for (int i = 0; i < 32; i++) {
arr[i] = (value >> i) & 1;
}
//将value的二进制位模式从左到右翻转
int left = 0;
int right = 31;
int tmp = 0;
while (left < right) {
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
unsigned int sum = 0;
//求翻转后的二进制序列对应的十进制数
for (int i = 0; i < 32; i++) {
sum +=arr[i] * pow(2, i);
}
return sum;
}
int main() {
printf("输入一个数,求它的二进制位模式从左到右翻转后的值");
unsigned int input;
scanf("%d", &input);
unsigned int ret=reverse_bit(input);
printf("%lld\n", ret);
system("pause");
return 0;
}