我已经找到方法,它实现的Adler32算法在C#中,我想使用它,但我不明白的部分代码:Adler32校验生成 - 为什么位和右移运算符被用来
有人可以解释我:
1)为什么时候为什么SUM2转移SUM1,SUM2和初始化
2)位的操作使用?
对维基的Adler32 https://en.wikipedia.org/wiki/Adler-32
&操作说明: (二进制和运营商副本位的结果,如果它存在于两个操作数)
private bool MakeForBuffer(byte[] bytesBuff, uint adlerCheckSum)
{
if (Object.Equals(bytesBuff, null))
{
checksumValue = 0;
return false;
}
int nSize = bytesBuff.GetLength(0);
if (nSize == 0)
{
checksumValue = 0;
return false;
}
uint sum1 = adlerCheckSum & 0xFFFF; // 1) why bit operator is used?
uint sum2 = (adlerCheckSum >> 16) & 0xFFFF; // 2) why bit operator is used? , why is it shifted?
for (int i = 0; i < nSize; i++)
{
sum1 = (sum1 + bytesBuff[i]) % adlerBase;
sum2 = (sum1 + sum2) % adlerBase;
}
checksumValue = (sum2 << 16) + sum1;
return true;
}