机器数的三种表示形式---原码、补码、反码和移码

疫情严重,没去上班,总结学习一下。武汉加油,中国加油。
一、真值和机器数
介绍机器数的三种表示形式之前,先介绍一下真值和机器数。
带+、-符号的数叫真值,把符号数字化得到的数称为机器数(1表示-,0表示+)。整数的符号位和数值位用逗号隔开,小数的符号位和数值位用小数点.隔开。例如:
真值:-1110、+1010、-0.1110、+0.1010
与之相对应的机器数(用原码表示):1,110、0,1010、1.1110、0.1010
注意:
计算机中并没有专门用来存储小数点的硬件结构,人们约定符号位后,数值位之前即为小数点。
二、原码
原码非常简单,1表示-,0表示+。前面已经提到整数的符号位和数值位用逗号隔开,小数的符号位和数值位用小数点.隔开。
关于原码的计算方法,其实有2种,一种是公式法,另一种是我们在大学课堂上学的简便方法。关于公式法,不想手打,贴张图好了。
在这里插入图片描述求小数原码时,真值x=0.1101,原码x=0.1101,原码小数点前的0代表这是正数,和真值小数点前的0含义不一样。
关于简便方法,真值为正数,符号位为0,否则为1,数值部分不变。对于小数和整数都适用,因为小数的符号位就是小数点前的0或者1。
当x=0时,
[+0.0000]原=0.0000
[-0.0000]原=1-(-0.0000)=1.0000
[+0000]原=0,0000
[-0000]原=2^4-(-0000)=1,0000
可见[+0]原≠[-0]原,0用原码表示有2种形式。
用原码进行加减运算时,需要用到加法器和减法器,所以引出补码,减法计算可代替加法运算。
三、补码
先介绍一下模,假设模为12,记作mod12,+9是-3以12为模的补数,记作-3≡ +9(mod12) ,同理有 -4≡ +8(mod12) -5≡ +7(mod12) 对于模和补数有3个结论: 1、正数的补数是它本身; 2、负数加上它的模就是他的补数 ; 3、如果一个正数和负数互为补数,则他们的绝对值之和为模 。
补码的计算方法也是公式法和简便法。首先看公式法:
在这里插入图片描述
在这里插入图片描述
然后看简便法,正数的补码是原码,负数的补码是原码除符号位外取反再加1。这适用于小数和整数的补码,同样也适用于根据补码求原码。
当x=0时,
[+0.0000]补=0.0000
[-0.0000]补=2-(-0.0000)=10.0000-0.0000=0.0000
[+0000]补=0,0000
[-0000]补=2^5-(-0000)=10,0000(符号位只能有1位,所以结果为0,0000)
由此可见0用补码表示只有1种形式。
四、反码
反码是由补码求原码或者由原码求补码的中间过渡形式。计算方法也是公式法和简便法。首先看公式法:在这里插入图片描述
在这里插入图片描述
然后看简便法,正数的反码是原码,负数的补码是原码除符号位外取反。这适用于小数和整数的反码。
当x=0时,
[+0.0000]反=0.0000
[-0.0000]反=2-2^(-4)+(-0.0000)=(10.0000-0.0001)-0.0000=1.1111
[+0000]反=0,0000
[-0000]反=(2^5-1)+(-0000)=1,1111
可见[+0]反≠[-0]反,0用反码表示有2种形式。 反码也可以看作是mod(2-2^(-n))(对于小数) 或
mod(2^(n+1)-1)(对于整数)的补码。
举例: 已知[y]补,求[-y]补。
结论:不管真值是正还是负,由[y]补求[-y]补都是采用“连同符号位在内,各位取反,末位加1”的规则。
五、移码
之所以引入移码,是因为用补码难以比较真值的大小。因为二进制补码比较大小时,会把符号位也加进去也一起比较,这样一来会导致负数比正数还要大,这明显是错误的。举例说明。
在这里插入图片描述
如果比较6位二进制补码的话,会得到-31>31,-21>21,与实际情况相反。如果给每个真值加上2^n(n为整数的位数),情况就不一样了。
在这里插入图片描述
如果比较6位二进制补码的话,会得到31>-31,21>-21,与实际情况相同。从6位代码本身就能比较真值的大小,这就是移码的作用。由此可见移码的定义:
在这里插入图片描述
从定义可以看出来,移码只对整数进行定义,不包括小数。这要从移码的应用范围分析,因为移码用来表示浮点数阶码,而阶码都是整数。
当x=0时,
[+00000]移=2^5+0000=1,00000
[-00000]移=2^5+(-0000)=1,00000
可见[+0]移=[-0]移,0用移码表示只有1种形式。
同时还有一点,同一个真值的补码和移码只相差一个符号位。
在这里插入图片描述
六、原码、补码、反码3种机器数的特点总结
1. 3种机器数的最高位均为符号位。符号位和数值部分用小数点.(对于小数)或者逗号,(对于整数)隔开;
2. 当真值为正时,原码、补码和反码的表示形式都一样,即符号位用0表示,数值部分与真值相同;
3. 当真值为负时,原码、补码和反码的表示形式不同,但其符号位都用1表示,而数值部分有如下关系:补码是原码取反加1,反码是原码每位取反;
4. 补码中的0只有1种表示形式,原码和反码中的0有2种表示形式。补码比原码和反码可以多表示一个负数。
六、实例
1、设机器数字长为8位(其中1位是符号位),对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?
在这里插入图片描述

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值