二进制位模式反转--c语言
题目描述
编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回 值value的二进制位模式从左到右翻转后的值。
例子:在32位机器上25这个值包含下列各位:00000000000000000000000000011001
翻转后:(2550136832)10011000000000000000000000000000
代码部分
#include <stdio.h>
__uint32_t reverse_bits(__uint32_t value);
int main(void)
{
__uint32_t number;
printf("please input the number which you want to reverse:");
scanf("%u",&number);
__uint32_t ret=reverse_bits(number);
printf("after reversed:%u",ret);
}
__uint32_t reverse_bits(__uint32_t value)
{
__uint32_t result=0;
for(int i=0;i<32;i++)
if((value>>i)&1)
result|=((value>>i)&1)<<(31-i);
return result;
}
思路部分
- 本程序不依赖于机器整型值长度,故使用__uint32_t的类型声明变量;
- if语句用来判断当前位与运算后是否为1,为1则执行下一句,为0则跳过下一句执行,一定程度上节省了时间(虽然不是很重要);
- 因为前面跳过执行,所以当要执行result那一句时,需要把前面跳过的补上,有value>>i;
- 跳过之后当前位和1进行与运算,然后向左移31-i位,最后与result进行或运算,把需要的位设置为1;