对于背景,我正在尝试计算存储在常量内存中的 IP 数据包的校验和(不能就地修改它)。在进行校验和之前,我应该假设数据包中现有的校验和为 0。与其将所有数据复制到临时缓冲区并存储 0,不如对整个数据包进行校验和,然后减去结果中的现有校验和。
为此,我正在寻找我在这里找到的减法的补码版本。不幸的是,如果我使用它,并从 0 中减去 0,我会得到 0x1111 而不是预期的 0:
- 将 0 转换为一个补码:[1111]
- 接下来,我们添加 0:[1111]
- 没有溢出位,所以我们完成了......
我本来希望 0 - 0 是 0——我错过了什么?