问题:
编写函数:unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:00000000000000000000000000011001
翻转后:(2550136832)10011000000000000000000000000000
程序结果返回:2550136832
思路: 重点在于怎样通过位运算将该数的每一位二进制位取出来,我们可以将一个二进制数某位跟1与,就可取出该位,然后左移相应位数即可。
实现代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int value) {
unsigned int ret = 0;
for (int i = 0; i < 32; ++i) {
ret += ((value >> i) & 1) << (31 - i);//取出value最低位的值,并左移至相应位置
}
return ret;
}
int main() {
unsigned int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
printf("翻转后的数为:%u\n", reverse_bit(num));
system("pause");
return 0;
}
运行结果: