这是代码:

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 )。

这意味着如果在 1v 位位置有一个 0x6996 则计算出的奇偶校验位为 1,否则为 0 - 例如,如果在第 5 行中 v 计算为 2,则返回`,如果为 3,则为 0被退回。

关于bit-manipulation - 来自bittwiddling网站的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3202745/

10-10 19:04