如何反转int但在C中按2位分组?

Han*_*Sun 4 c bit-manipulation

像这样:

input:  10010011
(10->01->00->11)

output: 11000110
(11->00->01->10)


input:  11010001
(11->01->00->01)

output: 01000111
(01->00->01->11)
Run Code Online (Sandbox Code Playgroud)

有人有任何想法吗?

Dan*_*her 7

lserni算法更少的操作:

uint32_t reverseByTwo(uint32_t value) {
    value = ((value & 0x03030303) << 2) | ((value >> 2) & 0x03030303); // swap adjacent pairs
    value = ((value & 0x0F0F0F0F) << 4) | ((value >> 4) & 0x0F0F0F0F); // swap nibbles
    value = ((value & 0x00FF00FF) << 8) | ((value >> 8) & 0x00FF00FF); // swap bytes
    value = ((value & 0x0000FFFF) << 16) | ((value >> 16) & 0x0000FFFF);
    return value;
}
Run Code Online (Sandbox Code Playgroud)

对于64位值,只需为32位半部分添加另一个交换,对于较小的类型,只需省略最后几次交换.