计算机中为什么要使用补码来进行数据的存储和运算

本文探讨了如何通过转换有符号整数为无符号整数进行加法运算,以简化计算机硬件电路设计。主要介绍了对有符号负整数采用反码和补码表示的方法,通过先取反再加1的方式,使得减法运算等效于加法运算,从而降低计算机基础硬件单元——加法器的复杂性,提高系统性能。

为了简化计算机硬件电路的设计。

1、由于整数加减运算是计算机内部最基本的运算,同时减法运算又等价于加法运算(a-b 等价于 a+(-b)),因此只保留加法运算。

2、无符号整数的加法运算很简单,加就行了,溢出就溢出了,没什么多说的,电路也很简单。

3、对于有符号整数的加法运算来说,在做加法时还要判断数据的正负,这会使电路复杂,因此能否想到一种更简单高效的计算方法来完成有符号整数的加法运算?

答案是,有。

具体思路是,(1)先将有符号整数“转为”无符号整数,(2)进行加法运算,(3)再将无符号整数的结果“转回”有符号整数,即可。

具体在于,如何“转为”和“转回”?

对于有符号正整数来说,这很简单,不用变就是了。

但对于有符号负整数来说,简单的不用变就有问题了。比如+(-1) (有符号整数,原码10000001),我们要是也不变,认为是+129 (无符号整数,原码10000001),那结果肯定是有问题的。大家按照刚才说过的计算思路随便找例子试就能看到问题在哪里。

为了解决这个问题,我们发现,对于一个8位整数来说,+(-1)和+255才是等价的(考虑溢出),为什么等价,是因为-1与255对数据最大容量256是同余的。

因此我们需要找到一种方法,使有符号数-1(原码10000001)能被当成无符号数255(原码11111111)来进行加法运算的方法。

方法就是(还以8位整数来举例子):

(1)保留符号位,然后其余各位取反。(取反的本质:其实相当于在原数(除去符号的部分)基础上加了一个1111111(7位,127))

(2)步骤(1)的结果再加1(总体相当于在原数(除去符号的部分)的基础上加了10000000(8位,128))

因为是负数,还有一个符号在首位,因此整体上相当于在原数(整体)的基础上加了10000000又加了10000000,即256。因此与原数对于数据最大容量256同余。即有符号负整数“转化”为无符号整数的方法找到了。转回的原理同理,方法就是逆操作一遍,就不赘述了。

总结一下,“转为”和“转回”的原理都是因为,找到对“最大容量” 同余 的那个无符号整数。

回望步骤(1),它叫反码。

回望步骤(2),它叫补码。

使用补码来做加法运算,将使计算机的基础硬件单元“加法器”的设计大大简化,提高了计算机的整体性能。
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值