8位无符号整型数据按位反转源码

//功能:
//  反转 unsigned char 中的位顺序。bit[0]和bit[7]互换,bit[1]和bit[6]互换,依此类推...。
//  E.g 
//        a=10001101(b)
//        按位反转后:
//        a=10110001(b)
unsigned char reverse_8_bit(unsigned char a) {
    return ((a * 0x0802LU & 0x22110LU) | (a * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
}

32位无符号整型数据按位反转源码

//使用条件:
//    以上面8位无符号整型数据反转函数为基础.
//功能:
//    反转 unsigned int 中的位顺序。bit[0]和bit[31]互换,bit[1]和bit[30]互换,依此类推...。
//    E.g:
//        a=10001110011010100010110001001011(b)
//        按位反转后:
//        a=11010010001101000101011001110001(b)
unsigned int reverse_32_bit(unsigned int a)
{
    return (reverse_8_bit(a >> 24) << 0) |
        (reverse_8_bit(a >> 16) << 8) |
        (reverse_8_bit(a >> 8) << 16) |
        (reverse_8_bit(a >> 0) << 24);
}