思路:
a、将需要反转数按位右移动
b、将每位右移i位的数与1比较,若该位为1,将该位左移7-i并置为1,否则置为0。以此类推。将左移的每位保存一个临时变量中,并最终返回。
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned ReversalBits(unsigned char x)
{
int i;
unsigned char temp;
for(i = 0; i < 8; i++)//10101111(175)--->11110101(245)
{
if((x >> i) & 0x01)
{
temp |= 1 << (7-i);
}
else
{
temp &= ~(1 << (7-i));
}
}
return temp;
}
int main(int argc, char* argv[])
{
unsigned char x = 175;//10101111(175)--->11110101(245)
printf("Reversal Before: %lu\r\n", x);
x = ReversalBits(x);
printf("Reversal After: %lu\r\n", x);
return 0;
}