二进制原码反码补码详解

二进制原码反码补码

首先我们在了解什么是原码,反码,补码之前,我们先来谈谈为什么需要有这些,只要原码不行吗?
答案肯定是不行的!😜 因为在计算机中,二进制的运算对于正数之间不会出现什么问题,但是当出现负数的运算的时候就会有问题,具体问题我们在下面再来分析。
我们先拿来看看什么原码,反码,补码

原码,反码,补码

下面我就都以十进制数据10为例子说明

原码所谓原码,顾名思义,就是数据本身二进制数据的体现形式,一个字节由八个二进制位组成

十进制10所对应的二进制数据为

1010

那么它所对应的原码就应该是

00001010

那么如果我想表示一个十进制数-10,用二进制该如何表示呢?

10的原码 **00001010**

上图我们可以看到上面的一串二进制数据就是我们十进制数据10对应的二进制原码,在最左侧的红色框框里面的数我们称之为高位,而高位代表符号位,用来表示这组数据是正数还是负数

高位是0代表正数,高位是1代表负数 而除高位外的其余为则代表数据的数值大小

所以上图的两组二进制数据分别代表十进制10和十进制-10

这个时候我们就可以谈谈上面的问题了,为什么需要反码和补码
假设我们按照上图的数据相加,那么10+(-10)的值应该是0

在这里插入图片描述

这里我们可以看到,直接用原码相加,我们很容易可以看出 它两相加的数不是等于0,而是-20。这里就出现了问题,我们可以看到原码的弊端--------当遇到负数运算时,会出现运算错误!为了避免出现运算错误,计算机在做运算时,全都是以二进制补码的形式在运算!
那么我们怎么得到补码呢,补码是通过对反码推出来的

反码:

对于正数而言,他的反码和原码相同
对于负数而言,他的反码是对原码逐位取反,但是符号位除外
这里解释一下取反,对0取反得到的结果是1,对1取反得到的结果是0
下面我们看看-10所对应的反码:

在这里插入图片描述

补码:

对于正数而言,他的补码和原码相同
对于负数而言,他的补码是在其反码的末位加1
-10所对应的补码:

在这里插入图片描述

下面我们进行-10和10的二进制运算

在这里插入图片描述
在这里插入图片描述

我们可以看到图一最下面的二进制数据有9位,而我们知道一个字节是由8个二进制位表示,所以最前面的1会被删除,就得到图二,我们就可以得到正确的运算结果。

如有不足,还望批评指正!

  • 25
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值