c语言 - 补码对弗莱彻校验和有影响吗?



维基百科关于Fletcher校验和的文章:

这些例子假设了2的补码算法,因为Fletcher的算法在1的补码机器上是不正确的。

这个问题提供了一本书的扫描,上面写着:

对255(1的补数运算)取模

Fletcher的校验和使用一个运行和,所以我不认为需要负数,目的是识别差异,所以只要在校验系统上使用相同的数字系统(1的补数,2的补数,都不是),那么它有关系吗?维基百科页面上给出的例子也指定了无符号整数类型。

我用C标记了这个,因为维基百科页面上给出的例子都是用C写的,所以也许这和这个有一些关系。我不是一个数学家,也不是一个勉强合格的程序员,所以很可能有一些非常明显的原因说明为什么互补会有影响。

数字系统很重要。

虽然弗莱彻的校验和使用两个补数算法(整数计算模256)和一个补数算法(整数计算模255),结果算法具有不同的错误检测特性。1位补码的最小未检测双比特错误间隔为2040位,而2位补码的最小间隔仅为16位(论文中的表1)。

因此,Fletcher明确建议不要使用两者的互补版本。

最新更新