在下面的链接中,我们有一个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;
}算法链接:http://scard.org/gsm/a51.html
发布于 2015-01-29 09:37:29
除了对字体大小做一些可能没有根据的假设(目前,unsigned long通常是64位的,而不是32位的),它不是很难编写的代码。
假设x是一个32位的值,那么:
x ^= x >> 16;将x的前16位与后16位进行异或运算。底部16位分别表示原始32位字中一对位的奇偶校验。对最低的8位重复此过程,然后是4,然后是2,然后是1位,因此最后,最低有效位是原始32位值的奇偶校验。
如果unsigned long是64位值,则代码仍会生成输入值的较低有效32位的奇偶校验。
https://stackoverflow.com/questions/28203934
复制相似问题