这是代码:
unsigned int v; // word value to compute the parity of
v ^= v >> 16;
v ^= v >> 8;
v ^= v >> 4;
v &= 0xf;
return (0x6996 >> v) & 1;
它计算给定单词
v
的奇偶校验。 0x6996 是什么意思?二进制数字 0x6996 是
110100110010110
。 最佳答案
好吧,该算法通过连续的按位 OR 将 32 位 int 压缩为相同奇偶校验的 4 位值,然后与 0xf
进行 AND 运算,以便在最低有效的 4 位中只有正位。换句话说,在第 5 行之后,v
将是一个介于 0 和 15 之间的整数。
然后它将该魔数(Magic Number) ( 0x6996
) 向右移动这个 0-16 值,并仅返回最低有效位 ( & 1
)。
这意味着如果在 1
的 v
位位置有一个 0x6996
则计算出的奇偶校验位为 1,否则为 0 - 例如,如果在第 5 行中 v
计算为 2,则返回`,如果为 3,则为 0被退回。
关于bit-manipulation - 来自bittwiddling网站的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3202745/