在以下链接中,我们有一个A5 / 1算法的教学实现。我知道它是如何工作的但我无法理解bit parity(word x)
函数的用途是什么?我知道它是什么,但只要告诉我它是如何工作的。
typedef unsigned long word;
typedef word bit;
/* Calculate the parity of a 32-bit word, i.e. the sum of its bits modulo 2 */
bit parity(word x) {
x ^= x>>16;
x ^= x>>8;
x ^= x>>4;
x ^= x>>2;
x ^= x>>1;
return x&1;
}
答案 0 :(得分:0)
除了对类型大小做出一些可能无根据的假设(这些天,unsigned long
通常是64位,而不是32位),这不是很难的代码。
鉴于x
是32位值,那么:
x ^= x >> 16;
xles x
的前16位,底部16位。最低16位分别给出原始32位字中的一对位的奇偶校验。此过程重复最后8位,然后是4,然后是2,然后是1位,因此最后,最低有效位是原始32位值的奇偶校验。
如果unsigned long
是64位值,则代码仍会产生输入值不太重要的32位的奇偶校验。