【问题标题】:Does the complement have any impact on Fletcher's checksum?补码对 Fletcher 的校验和有影响吗?
【发布时间】:2016-01-13 10:16:23
【问题描述】:

Wikipedia article for Fletcher's checksum 声明:

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

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

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

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

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

收到的任何见解都表示感谢。

【问题讨论】:

  • 我可以添加吗,我花了 3 个不同的浏览器,关闭每个插件、扩展程序、防火墙,等待一段时间,使用隐​​私浏览,等待更多......大约 50 次尝试只是 绕过那个该死的烦人的验证码。显然,在 10000 次代表之后它不会打扰我,所以,通过投票按钮给我一些爱! (o_O)
  • 只有在现代二进制补码硬件或无符号计算中,您必须手动考虑从 254 到 0(模 255)的包装。一个补码系统上的有符号字节将免费包装,避免 -0 或 +0,无需人工干预。
  • 哦,假设您正在计算一个简单的算术 8 位校验和。如果直接在二进制补码(模 256)中完成,则任何单个位错误只会影响它们上方的更高有效位,而在一个补码和(模 255)中雪崩到较低位,因为模数相对于该位职位。也就是说,否则第 7 位中的两个错误会相互抵消,而第 0 位中的错误需要 256 个错误才能抵消。
  • @doynax 谢谢,知道这很有帮助。我认为您应该添加这些作为答案。

标签: c checksum twos-complement ones-complement


【解决方案1】:

数字系统很重要。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2012-08-27
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多