【发布时间】:2017-06-02 14:48:47
【问题描述】:
我找到了用 C# 实现 Adler32 算法的方法,我想使用它,但我不明白部分代码:
谁能解释一下:
1) 为什么初始化sum1和sum2时使用位运算符
2) 为什么 sum2 会移位?
维基上的 Adler32 https://en.wikipedia.org/wiki/Adler-32
& 运算符解释: (如果两个操作数中都存在,则二进制 AND 运算符将一个位复制到结果中)
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;
}
【问题讨论】: