微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在处理大数时,补码仍然有效?

如何解决为什么在处理大数时,补码仍然有效?

我最近正在阅读二进制补码并注意到,当处理非常接近极限的无符号整数(主要是足够大的 MSB 为 1 的数字)时,减法似乎仍然有效,即使有符号位应该仍然是填充实际号码信息。例如,取254和252,分别表示为8位的0b111111100b11111100。减法将采用 2 的 252 的补码,因此 0b11111110 + 0b00000100 给出了正确的结果 0b00000010 = 2。为什么这会按预期工作?

PS.:我也注意到,如果我要取无符号数并将它们视为二进制补码形式,我会得到 -2 和 -4,它们会减去 2。是这可能是系统如何建立并最终被设计使用的结果?

解决方法

遵循 John Filleau 的评论:

如果8位数字N的二进制补码是(256 - N),如果8位加减法是模256,那就是N1 - N2 = (N1 - N2)%256。如果将 N2 的减法替换为其二进制补码的加法,则得到 (N1 - N2) = (N1 + (256 - N2))%256。模运算是可分配的,而且256%256 = 0,所以你发现对于N1和N2的任何值,加上N2的补码就等于减去N2

我在分析这个操作时的主要错误是(除了忽略值换行的事实)假设计算机需要将无符号整数转换为有符号整数来执行减法运算,如上所示,这不一定是案件。补码的思想适用于无符号数和有符号数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。