把一个字节按位翻转排列解决方案

把一个字节按位翻转排列
例如一个字节的位排列为:0110 1010。翻转即为:0101 0110。
用C代码高效实现。谢谢!
第一次发问,也不知道自己有多少分,见笑了。

------解决方案--------------------
C/C++ code
#include <stdio.h>
void    ShowBit(unsigned int x, int n)
{
    if (--n) ShowBit(x>>1, n);
    printf("%d", x%2);
}
void    ReverseBit(unsigned int* pValue)
{
    unsigned int n = *pValue;
    n = (n&0x55555555)<<1|(n&0xAAAAAAAA)>>1;
     n = (n&0x33333333)<<2|(n&0xCCCCCCCC)>>2;
     n = (n&0x0F0F0F0F)<<4|(n&0xF0F0F0F0)>>4;
     n = (n&0x00FF00FF)<<8|(n&0xFF00FF00)>>8;
     n = (n&0x0000FFFF)<<16|(n&0xFFFF0000)>>16;
    *pValue = n;
}
int main()
{
    unsigned int x = 0x6A;
    ShowBit(x, 32); printf("\n");
    ReverseBit(&x);
    ShowBit(x, 32); printf("\n");
    return 0;
}

------解决方案--------------------
int reserv(int n)
{
int i;
int r = 0;
for(i=0;i<sizeof(n)*8; i++)
{
r |= (n&1);
n >> 1;
r << 1;
}
return r;
}
------解决方案--------------------
C/C++ code
int ReverseBits(int number)
{
    int result, modVal;
    int i;
    
    modVal = 1 << 31;
    number <<= 24;    //if reverse an Integer number, please comments this line
    result = 0;
    
    for(i = 0; i < 8; i++)
    {
        if((number & modVal) != 0)
            result |= (1 << i);
        number <<= 1;
    }
    
    return result;
}
 
int main(void)
{
    printf("%d", ReverseBits(1));
    return 0;
}

------解决方案--------------------
//改一下,改成动态分配,上面也有点BUG,memset应该放WHILE里去

C/C++ code
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>

typedef struct 
{ 
    unsigned char bit_1 : 1; 
    unsigned char bit_2 : 1; 
    unsigned char bit_3 : 1; 
    unsigned char bit_4 : 1; 
    unsigned char bit_5 : 1; 
    unsigned char bit_6 : 1; 
    unsigned char bit_7 : 1; 
    unsigned char bit_8 : 1; 
}bit;

void Dec2Bin(int *a,char *b,int n=1) //将数据转换为N个字节,默认为1个字节 
{ 
    bit *p_bit; 
    int j; 
    
    p_bit=(bit *)a;
    for(j=n-1;j>=0;j--) 
    { 
        *b++=(p_bit+j)->bit_8; 
        *b++=(p_bit+j)->bit_7; 
        *b++=(p_bit+j)->bit_6; 
        *b++=(p_bit+j)->bit_5; 
        *b++=(p_bit+j)->bit_4; 
        *b++=(p_bit+j)->bit_3; 
        *b++=(p_bit+j)->bit_2; 
        *b++=(p_bit+j)->bit_1; 
        
    } 
}

void StrTurn(char *str,int n=1) //将N个字节倒序排列,默认为1个字节
{
    char *p,*q;
    char temp;
    p=str;
    q=str+n*8-1;
    while(p<q)
    {
        temp=*p;
        *p=*q;
        *q=temp;
        p++;
        q--;
    }
}

int main() 
{ 
    int a,i,n; 
    char *b;  
    while(printf("请输入要转换的数据和字节数:\n"),scanf("%d%d",&a,&n)!=0)
    {
        b=(char *)malloc(n*8+1);
        memset(b,2,n*8+1);
        Dec2Bin(&a,b,n); 
        printf("%d的二进制形式为:\n",a);
        for(i=0;b[i]!=2;i++) 
            printf("%d ",b[i]); 
        printf("\n\n"); 
        StrTurn(b,n);
        printf("翻转后%d的二进制形式为:\n",a);
        for(i=0;b[i]!=2;i++) 
            printf("%d ",b[i]); 
        printf("\n\n\n"); 
        free(b);
    }
    return 0; 
}