我已經找到方法,它實現的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;
}