我从这个链接上读到了计算奇偶校验的比特旋转技巧:Bit Twiddling Hacks
为了计算奇偶校验,有一种查找方法,它为0到255的整数生成奇偶校验表,其中有5个行代码。

#define P2(n) n, n ^ 1, n ^ 1, n
#define P4(n) P2(n), P2(n ^ 1), P2(n ^ 1), P2(n)
#define P6(n) P4(n), P4(n ^ 1), P4(n ^ 1), P4(n)
#define LOOK_UP P6(0), P6(1), P6(1), P6(0)

unsigned int table[256] = { LOOK_UP };

我检查了计算[0..15]奇偶校验的P2(n)和P4(n)。但我不明白这些代码背后的直觉。这些行如何计算[0..255]的奇偶校验?我想知道这种递归方法背后的直觉和理论。提前感谢。

最佳答案

对于P2,位设置为1的奇偶校验是微不足道的:

0b00 -> 0
0b01 -> 1
0b10 -> 1
0b11 -> 0

Prepend00不会改变奇偶性,
但在下一步准备更改奇偶校验:
0b0100 -> 1 // 0 ^ 1
0b0101 -> 0 // 1 ^ 1
0b0110 -> 0 // 1 ^ 1
0b0111 -> 1 // 0 ^ 1

01的奇偶性与0b10..相同,并将随着0b01..再次改变
0b11..允许开关:
n | n ^ 1
--|--------
0 | 1
1 | 0

或者n ^ 1可能已被选择,或者其他具有相同表的公式
希望你现在看到这个模式。

09-12 06:17