【发布时间】:2019-05-27 07:25:21
【问题描述】:
我正在通过以下链接阅读一些用于计算奇偶校验的小技巧: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] 的奇偶校验?我想知道这种递归方法背后的直觉和理论。提前致谢。
【问题讨论】:
-
由于所有这些代码在使用 C 编译时都存在,我建议将其重新标记为 C。在现代 C++ 中,可以使用
constexpr来制作此表