1,数学方法。(缺点每次调用函数,开销大)
#include<math.h>
unsigned int reverse_bit(unsigned int num)
{
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++)
{
ret += ((num >> i) & 1) * pow(2, 31 - i);
}
return ret;
}
#include<stdio.h>
#include<windows.h>
int main()
{
unsigned int ret = 0;
int num = 25;
ret = reverse_bit(num);
printf("%u\n", ret);
system("pause");
return 0;
}
2,直接移位法
unsigned int reverse_bit(unsigned int num)
{
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++)
{
ret += ((num >> i) & 1)<<(31-i);
}
return ret;
}
#include<stdio.h>
#include<windows.h>
int main()
{
unsigned int ret = 0;
int num = 25;
ret = reverse_bit(num);
printf("%u\n", ret);
system("pause");
return 0;
}
3,或移位法
unsigned int reverse_bit(unsigned int num)
{
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++)
{
ret <<= 1;
ret |= ((num >> i) & 1);
}
return ret;
}
#include<stdio.h>
#include<windows.h>
int main()
{
unsigned int ret = 0;
int num = 25;
ret = reverse_bit(num);
printf("%u\n", ret);
system("pause");
return 0;
}