1

弗莱彻校验和的维基百科文章指出:

这些示例假设补码算法,因为弗莱彻算法在补码机器上是不正确的。

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

加法以 255 为模(1 的补码算术)

弗莱彻的校验和使用的是运行和,所以我看不到负数的必要性,目的是识别差异,所以只要在校验系统上使用相同的数字系统(一个补码,二进制补码,两者都不是)那么这有关系吗?维基百科页面上给出的示例也指定了无符号整数类型。

我已经用 C 标记了它,因为 Wikipedia 页面上给出的示例都是 C 语言,所以这可能与此有关。我不是一个数学家,也不是一个勉强能胜任的程序员,所以很可能有一些非常明显的原因说明补码会产生影响。

4

1 回答 1

3

数字系统很重要。

尽管 Fletcher 的校验和同时使用二进制补码算法(整数计算模 256)和一个补码算法(整数计算模 255),但生成的算法具有不同的错误检测特性。一个补码版本的未检测到的双位错误的最小间隔为 2040 位,而二进制补码的最小间隔仅为 16 位(论文中的表 1)。

因此,Fletcher 明确建议不要使用二进制补码版本。

于 2017-07-19T20:21:46.417 回答