奇偶校验查询表生成

时间:2018-12-30 07:39:21

标签: c bit parity

我正在从以下链接中读取一些用于计算奇偶校验的可笑的骇客:Bit Twiddling Hacks

对于计算奇偶校验,有一个查找方法,该方法为行号为5的0到255之间的整数生成奇偶校验表。

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

我检查了值P2(n)和P4(n),它们计算出[0..15]的奇偶校验。但是我不理解这些代码行背后的直觉。这些行如何计算[0..255]的奇偶校验?我想知道这种递归方法背后的直觉和理论。预先感谢。

1 个答案:

答案 0 :(得分:1)

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

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

添加00不会更改奇偶校验,
但先设置下一个01更改奇偶校验:

0b0100 -> 1 // 0 ^ 1
0b0101 -> 0 // 1 ^ 1
0b0110 -> 0 // 1 ^ 1
0b0111 -> 1 // 0 ^ 1

0b10..的奇偶校验与0b01..相同,并且将再次随着0b11..改变

n ^ 1允许切换:

n | n ^ 1
--|--------
0 | 1
1 | 0

或者选择!n或其他具有相同表格的公式

希望您现在看到图案。