c - 奇偶查找表生成

标签 c bit parity

我从这个链接阅读了一些计算奇偶校验的技巧: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

前置 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 可能已被选择或具有相同表格的其他公式

希望您现在看到了模式。

关于c - 奇偶查找表生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975983/

相关文章:

c - C中位操作的奇怪行为

c# - Java VS C# 中的 intBitsToFloat 方法?

c - 如何判断 "1"位是偶数还是奇数

networking - 串行通信波特率、奇偶校验和停止位。使用哪些选项以及何时使用?

c - 在 C 中打印一个 unicode 框

c - 如何将字符串分隔为不同的类型、can 信号?

连接不断失败,C 语言中出现错误 10049

c++,n位移位的工作原理

c - int bitparity的解释

c - 使用 C 语言连接 Postgres 数据库时出错 - 使用 libpq-fe.h