计算机为什么要以补码的形式存储数据?(原码、反码和补码)

(首先说一下计算机只存储二进制数据的原因,因为计算机由逻辑电路组成,而逻辑电路通常只有两种状态,即开关的接通与断开,刚好可以表示成‘1’和‘0’。另外,计算机为了设计简单,只设计了加数寄存器,通过补码的形式可以将减法转换为加法,计算机只能进行加法操作)。

原码:数的最原始的二进制编码。

例:
120的原码为0111 1000(最高位为符号位,0表示正数,1表示负数)
-23的原码为1001 0111
-0的原码为1000 0000(原码中,0有两种表示方法)
+0的原码为0000 0000
-1的原码为1000 0001
+1的原码为0000 0001

如果在计算机中存储的原码,在计算1+(-1)时,运算步骤如下:
在这里插入图片描述
1+(-1)的正确结果应该为0,而用原码存储时,得到的结果为-2。
如果计算机中存储数据使用原码,则会导致两个问题,1.有负数参与的运算结果不正确。2.0的表示方法有两种。

反码

正数的反码为其本身,负数的反码为符号位不变,其他位取反。

-0的反码为1111 1111(-0的原码为1000 0000,符号位1不变,其它位取反)
+0的反码为0000 0000
-1的反码为1111 1110
+1的反码为0000 0001
使用反码存储时,计算1+(-1)= 1111 1111。得到的结果为-0 。
虽然使用反码存储能够解决有负数参与运算的问题,但0的存储形式仍然有两种。

补码

正数的补码为其本身,负数的补码等于反码加1。

-0: 0000 0000(-0的反码为1111 1111,加1,变为1 0000 0000,高位溢出)
+0:0000 0000
-1:1111 1111
+1:0000 0001

当使用补码存储数据时1+(-1)=1 0000 0000,高位溢出,即得到的结果为0000 0000 = 0,运算得到的结果正确,并且0的存储形式只有一种,即0000 0000。因此,计算机中使用补码存储数据。

补码转原码

方法1:
第一步:符号位不变,其他位取反。
第二步:加1。

方法2:(该方法使用的较少)
第一步: 减1。
第二步:符号位不变,其他位取反。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值