原码 反码 补码介绍

原码 反码 补码

冯~诺依曼提出的经典计算机体系结构框架,一台计算机由运算器,控制器,存储器,输入和输出设备组成。其中运算器,只有加法运算器。计算机中的没法直接做减法的,它的减法是通过加法来实现的。原码、反码、补码的产生过程,就是为了解决,计算机做减法和引入符号位(正号和负号)的问题。

任何存储于计算机中的数据,其本质都是以二进制码存储。

原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

反码:正数的反码等于其原码;负数的反码就是其的原码除符号位外,按位取反。

补码:正数的补码等于其原码;负数的补码等于其反码,再+1。

为了简化明了,下图给出四位二进制的补码、反码、源码表示法:

正数的 原码、反码、补码都一样,最高位表示符号位——为‘0’——表示正号

负数的 原码,数值部分和正数原码数值部分一样,最高位表示符号位——为‘1——表示负号。负数的反码就是其原码除符号位外,按位取反。负数的补码等于其反码+1

细心的读者可以看到0的源码和反码分正负,有两种形式。0的补码不分正负,只有一种形式。

[+0]原码=0000 ,   [-0]原码=1000 ;

[+0]反码=0000 ,   [-0]反码=1111;

[0]补码=0000,对于补码0用0000表示,1000表示-8——而非-0的补码!这样补码中-0不存在了!

4位二进制表示有符号数,原码、反码范围是[-7~7],补码范围是[-8~7]

引入补码后,其实减去一个数,对于数值有限制,有溢出的运算(模运算)来说,其实也相当于加上这个数的补码,把减法当成加法时并不是必须要引入符号位的。

补码加法运算: [x]补+[y]补=[x]补+[y]补

补码减法运算:[x]补 - [y]补 = [x]补 +[-y]补

下面以4位二进制数为例看看:不使用减法如何计算0110(6)-0010(2)

0110(6)-0010(2)=0110(6)+1110(14)=10100(20=16+4),对于四位二进制数,最大只能存放4位(硬件决定了),如果我们低四位,正好是0100(4),正好是我们想要的结果。

使用补码,减法运算可以转化为加法运算,对计算机硬件而言实现加法运算是比较容易的,而且速度较快。

附:原码,反码,补码杂谈 https://www.imooc.com/article/16813?block_id=tuijian_wz

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值