功能
将unsigned int
类型的整数二进制位从左到右反转。
如:32位机器上,25的二进制位如下:
00000000 00000000 00000000 00011001
交换后二进制位如下:
10011000 00000000 00000000 00000000
转换为十进制是 2550136832
实现步骤
- 确定二进制位位数
- 设置一个
unsigned int
类型的变量 i 为1,i 一直左移,当 i 的值为10000000000000000000000000000000
,再进行左移时,i 就会变为0 - 利用这一点就可确定二进制位的位数
- 设置一个
- 判断整数二进制位最后一位是否为1
- 方法1:当整数与2进行取模运算,结果如果为1,则最后一位就必定为1,否则为0
- 方法2:整数与1进行AND运算,当结果为1,则最后一位为1,否则为0
- 构造交换后整数的二进制位
- 当最后一位为1时,使用OR运算设置为1,然后左移
- 当最后一位为0时,直接左移
代码实现
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bits(unsigned int value);
int main(void)
{
unsigned int num = 25;
unsigned int ret = reverse_bits(num);
printf("ret = %u\n", ret);
return EXIT_SUCCESS;
}
unsigned int reverse_bits(unsigned int value)
{
unsigned int res = 0;
int i;
for (i = 1; i != 0; i <<= 1)
{
res <<= 1;
if(value & 1)
res |= 1;
value >>= 1;
}
return res;
}