编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值

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

猜你喜欢

转载自blog.csdn.net/weixin_43267837/article/details/88932779