写一个函数,反转一个无符号字符变量x(unsigned char x),并且把结果保存在无符号变量y中,反转处理如下: 反转前:x = 10101111 (二进制) 反转后:y = 11110101

思路:

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;
}

猜你喜欢

转载自blog.csdn.net/qq_30295609/article/details/79983057
今日推荐