为什么会有原码、反码、补码?

       先说补码表示的好处:1、减少计算机硬件设计开销(一个加法器可以完成加法,减法两种运算) 2、解决0的重复编码问题 3、多存储一个负值(-2的n-1次方,n为机器字长)

        首先我们需要知道一个概念,计算机是用二进制表示数据的,数据的二进制形式即所谓机器数。为了表示负数,现代机器字长最高位用来表示符号位,最高位为0说明是正数,为1说明是负数。因此机器数的形式值不等于真值。1000 0101 的真值是-5,而不是形式值133。

正数的原码、反码、补码都是相同的,负数的反码是将非符号位取反,补码是在反码的基础上加1.

为什么?


以8位机器字长为例,假设机器只有加法器,我现在要进行加法减法运算

如果使用原码表示,8位一起参与加减法运算
3+5 = 8
0000 0011 + 0000 0101 = 0000 1000(似乎没有什么问题)
3-5 =-2 —>3 + (-5) = -2
0000 0011 + 1000 0101 = 1000 1000

因此,原码表示法无法进行减法运算! 

如果用反码表示

由于正数的原码反码相同,所以不会产生问题

1 - 2 = 1+(-2) = -1

0000 0001 + 1111 1101 = 1111 1110(反码)  = 1000 0001(原)

减法问题解决了

1 - 1 = 1+ (-1) = 0

0000 0001 +1111 1110 = 1111 1111(反码) =1000 0000(原)

似乎0有了符号!

于是补码诞生了!
0000 0001 +1111 1111 = 0000 0000 (进位的0舍弃了)于是0的编码[0000 0000]

为什么8位机器能表示-128-127的范围?

-128 补码  1000 0000 ,-128在8位机器在最高位为符号位的情况下是没有原码、反码的。

为什么反码表示法能解决减法问题? 为什么反码会出现+0和-0?

同样以8位机器字长为例,假设机器只有加法器
1-1=0 —>1+(-1)=0
0000 0001 + 1000 0001 = 1000 0010 (-2) 原码出现错误的原因,将符号位也一起运算了。
如果用反码表示:0000 0001 + 1111 1110 = 1111 1111(反) = 1000 0000(原码) 这样 0似乎有了两种编码

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锦川大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值