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