原文第9部分的补充
原因
不得不承认把这个系列的翻译继续下去是很有挑战的。最近加班多,工作之余的精力就比较少了。坚持下去的想法还是有的,但回顾渐忘的初心,做这件事情的意义是在于帮助那些想把CRC算法学明白,而英文又差那么一点的人们,帮助他们从最根本的原理上来理解这个算法系列。我在之前自己看的过程中就发现作者的思路时有跳跃性。我自己在看的时候思路经常出现断续,作者说的标题“轻松理解”其实是有点夸大了。不符合我的习惯,我的习惯是每一个演进,都有它的原理在里面,可以直接看到,不需要读者再去思考。所以有了写这篇注解动机。
为了保持译文的完整和原本的条理,不方便直接在原文中加入大量的注解,另外只有证明我自己确实是理解了这部分,才能说明我翻译的基础是牢固的。所以才有了这一篇,作为原文第9节的注解。这里我会把我理解这部分的思路一步步展现出来。
原文梳理
第9节作为第8节的进一步,远远没有第8节那么容易理解。第8节,在讲解基本的直接实现的算法,其原理也非常简单,与长除法对应,也就是用移位与异或来实现长除法。第9节中,在第8节直接实现的基础上,作者介绍了表驱动实现。他的思路是,介绍表驱动的2个基础理论
:
1. 由poly和信息的前8位,可以确定第8次迭代后,寄存器的最高位值是0或者1。
2. 一个特定数a多次在不同的偏移位置与同一数b相异或,得到的结果,与a经过相同的偏移的值相异或后,再与b相异或得到的结果相同。用公式表达就是:
[(a << 1) ^ b] ^ a ^ (a << 2) ^ (a << n) =