关于补码的来源

在很多教科书上直接给出了原码反码和补码的定义和计算,并直接给出理由:计算机的硬件结构只能做加法。这个理由是对的,可是为什么正好是补码这种形式呢?由于计算机硬件基本结构是加法器,那么最好我们用一种特别的方式来表示负数,这个过程可以称之为编码(数学上叫做映射),参与计算后,这种方式还能够再度用同样的方式进行解码得出真实的结果。按照csapp中文版(原书第二版)p43的说法,确实曾经有过用反码表
摘要由CSDN通过智能技术生成

在很多教科书上直接给出了原码反码和补码的定义和计算,并直接给出理由:计算机的硬件结构只能做加法。这个理由是对的,可是为什么正好是补码这种形式呢?

由于计算机硬件基本结构是加法器,那么最好我们用一种特别的方式来表示负数,这个过程可以称之为编码(数学上叫做映射),参与计算后,这种方式还能够再度用同样的方式进行解码得出真实的结果。按照csapp中文版(原书第二版)p43的说法,确实曾经有过用反码表示负数的计算机出现过,毋庸置疑,后来的补码计算机必然是参考了反码计算机并加以修改,所以我们的计算机基础书上一以贯之的讲解了原码、反码和补码的关系也是如实反映历史,尽管它这么编排会让我们觉得原码和反码好像没用毕竟我们现在都是补码计算机。

为什么恰好是如今的补码规则这种编码方式呢?我们不妨从头来想一下这个问题,并以4位二进制数举例。

我们知道在计算机里任何计算都可以归结到加法这个运算,而根据加法结合律和交换律,任意个数相加都可以归结到两个数相加,又因为符号的原因,可以把任意两个数相加归结到正数加负数或者正数加正数(如果把0也暂时记入正数),难道不是吗?如果是-2+(-3),可以认为是0+(-2)+(-3),可以做两次加法。

由于正数相加的情况,用最先的原码表示就已经是十分圆满,所以最好保留这种表达方式,以求简便。那么,问题只留下负数的表示问题。

在这之前,我们先回忆下两个小点。

一个点是经典的时钟问题,一个钟面有12个数的时钟,5小时前的时间和7小时候的时间

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值