作者:因情语写
链接:https://www.proprogrammar.com/article/253
声明:请尊重原作者的劳动,如需转载请注明出处
说明:本来是抄PPT的内容,但时间来不及,所以以后只写一些自己认为的基础,重点,难点的精简内容,以节约时间,提高学习效率
(二)定点数的表示与运算
(三)浮点数的表示与运算
2.2 定点数的表示与运算
无符号数的表示---寄存器的位数
反映无符号数的表示范围
如8位无符号数的范围是0~255,16位无符号数的范围是0~65535
有符号数
1、机器数与真值
真值 机器数
带符号的数 符号数字化的数
+0.1011 01011
| 小数点的位置
-0.1011 11011
| 小数点的位置
+1100 01100
| 小数点的位置
-1100 11100
| 小数点的位置
定点表示
小数点按约定方式标出
原码、补码、反码、移码
-正数的编码值与真值一样
-负数具有不同的编码
-编码的最高位为符号位:
- 0 表示正
- 1 表示负
原码表示法
最高位作为符号位,用“0”表示正号,用“1”表示负号,有效值部分用二进制的绝对值表示。
简单地说:原码=符号+绝对值
定义
整数
x为真值 n为整数的位数
如 x = +1110 [x]原 = 0,1110 用逗号将符号位和数值部分隔开
x = -1110 [x]原 = 2⁴ + 1110 = 1 1110
x为真值
如 x = +0.1101 [x]原 = 0.1101 用小数点将符号位和数值部分隔开
x = -0.1101 [x]原 = 1 - (-0.1101) = 1.1101
x = + 0.1000000 [x]原 = 0.1000000 用小数点将符号位和数值部分隔开
x = - 0.1000000 [x]原 = 1-(-0.1000000) = 1.1000000
注:原码的+0.0000[00000]和-0.0000[10000]不一样
原码的特点:简单、直观
但是用原码作加法时,会出现这种问题:
如果是一正一负做加法,那么结果可正可负,需要判断符号
想法:能否只作加法?
找到一个与负数等价的正数,来代替这个负数,就可使减->加
补码表示法
可以看成模12
一个负数加上“模”即得该数的补数
一个正数和一个负数互为补数时
它们绝对值之和即为模数
1011 0000?
1011 1011
-1011 +0101
---------- ---------
0000 10000 - 1是溢出,会被去掉
可见 1011可用+0101代替
记作 1011 ≡ +0101 (mod2⁴)
同理 011 ≡ +101 (mod2³)
0.1001 ≡ + 1.0111 (mod2)
(2)补码定义
整数
x为真值 n为整数的位数
如 x=+1010 x=-1011000
[x]原=0,1010 [x]补=2⁷⁺¹+(-1011000)=1,0101000 用逗号将符号位和数值部分隔开
问题:要进行减法,不方便,要进行改进
小数
x为真值
如x = +0.1110 x=-0.110000
[x]补= 0.1110 [x]补=2+(-0.1100000)=1.0100000 用小数点将符号位和数值部分隔开
(3)求补码的快捷方式
设x = -1010时
则[x]补 = 2⁴⁺¹ - 1010 = 1111 + 1 -1010 = 10101 + 1 = 1,0110
当真值为负时,补码可用原码除符号位外,每位取反,末位加1求得
如何由补码求原码?
已知[x]补 = 1.0001,求x
由定义得
x = [x]补 - 2
= 1.0001 - 10.0000
= -0.1111
快捷方式就是当补码为负时,原码可用补码除符号位外,每位取反,末位加1求得
总结求补码的方法:
正数补码等于其原码,符号+绝对值
负数的补码(两种方法):
1、先写出该数的原码,保持符号位不变,其余各位对应求反,且在末尾加1。
2、先写出与该负数对应的正数的补码表示,将其按位求反(包括符号位),且在末尾加1。
注:真值零的补码是唯一的
+0=-0=0....0
4. 反码表示法
整数
x为真值 n为整数的位数
注:正数的原补反码相同,负数的补码是原码除符号位按位取反加1,负数的反码是原码除符号位按位取反不加1
小数
x为真值 n为整数的位数
负小数的反码也即按数取反,末位不加1(反码与补三很像,与补码对比)
0的反码
+0.0 -> 0.0000
-0.0 -> 1.1111
+0 -> 0,0000
-0 -> 1,1111
即可知+0≠-0
三种机器数的小结
原-补-反
最高位为符号位,书写上用“,”(整数)或“."(小数)将数值部分和符号位隔开
对于正数,原码=补码=反码
对于负数,符号位为1,其数值部分
补码:原码除符号位外每位取反末位加1
反码:原码除符号位外每位取反
反码是原码的一次操作(按位取反)而来,表示范围和原码相同
8位字长的几种表示法的真值的范围
设机器字长有n+1位
-原码定点小数的表示范围为 -(1-2⁻ⁿ)~(1-2⁻ⁿ)
-补码定点小数的表示范围为 -1~(1-2⁻ⁿ)
-原码定点整数的表示范围为 -(2ⁿ - 1)~2ⁿ - 1
-补码定点整数的表示范围为 -2ⁿ~2ⁿ - 1
由[y]补包括符号位在内按位取反末位加1得[-y]补
5. 移码表示法
补码是先增后减再增,不好直接判断其真值大小
x为真值 n为整数的位数
移码的大小和真值的大小的一致的
补码和移码只差一个符号位
最小真值的移码为0...0, [0]移码=1,0...0,实际使用中用移码表示浮点数的阶码,反码的表示范围和补码保持一致
计算机中r取2、4、8、16等
S小数,可正可负,j整数,可正可负
规格化数
2. 浮点数的表示范围
3. 浮点数的规格化形式
r=2 尾数最高位为1 -规格化数
4. 浮点数的规格化
r=2 左规 尾数左移1位,阶码减1
右规 尾数右移1位,阶码加1
规格化会改会最小正数和最大负数的范围(因为尾数的第一位变成了0)
机器零
当浮点数尾数为0时,不论其阶码为何值按机器零处理
当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
当阶码用移码,尾数用补码表示时,机器零为
0,0....0;0.0....0 表示的规整,有利于机器中”判0“电路的实现
四、IEEE 754标准
尾数为规格化表示-原码 1.ff...ff
非”0“的有效位最高位为”1“(隐含)
符号位S 阶码 尾数 总位数
短实数 1 8 23 32
长实数 1 11 52 64
其中127叫做偏移值
所以一个规格化的32位浮点数x的真值表示为:
x = (-1)ˢ x (1.M) x 2ᴱ⁻¹²⁷
IEEE754的32位浮点数表示的除0外绝对值最小的数:
s 00000001 0000 0000 0000 0000 0000 000
x = (-1)ˢ x 1.0 x 2⁻¹²⁶
IEEE754的32位浮点数表示的除∞外绝对值最大的数:
s 11111110 1111 1111 1111 1111 1111 111
x = (-1)ˢ x (2-2⁻²³) x 2¹²⁷
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202206 | 4 |
202205 | 2 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论