【发布时间】:2011-05-11 15:41:42
【问题描述】:
我的解决方案:(对于输入块的每一位,都有这样一行)
*parity ^= (((x[0] >> 30) & 0x00000001) * 0xc3e0d69f);
所有类型都是 uint32。此行获取输入 x 的第二位,将其移至 LSB 并将所有其他位设置为零。然后,将 32 位奇偶校验与为该位设置的相应奇偶校验进行异或。
我发现这种乘法解决方案是执行此条件异或的最快方法。有更快的方法吗?
【问题讨论】:
-
你在说什么语言/处理器?
-
您要计算奇偶校验的块有多大?乘以 0xc3e0d69f 的意义何在?
-
我说的是 C++。数据块是 256 位(因此 uint32 x[0..7]。奇偶校验是 32 位(存储在 uint32 中)。对于输入的每个设置位,奇偶校验字段都会应用一个特定的 XOR-Mask(并行实现) LFSR)。
标签: c bit-manipulation parity