原码 反码 补码介绍

原码 反码 补码

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

 

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

原码:是最简单的机器数表示法。用最高位表示符号位,‘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),正好是我们想要的结果。

 

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

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读