1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-10-30 20:04:19 +08:00

更新数据表示

This commit is contained in:
Didnelpsun
2021-09-03 23:43:33 +08:00
parent 89d18a6208
commit 15eef0854f
2 changed files with 108 additions and 4 deletions

View File

@@ -347,8 +347,24 @@ record.a(0x11)|record.a(0x01)|record.a(0x00)|record.a(0x00)|record.b|填充|reco
补码算术左移低位补$0$,补码算术右移,高位补$1$。如果是算术右移,则会一直补$1$,而无法变成$1.0$开头,所以要使用算术左移,移动三位得到$1.0100000$,同时阶码减$3$变为$3$,最后规格化结果为$0,011;1.0100000$。
<!-- #### 浮点数表示范围
**例题** 浮点数格式如下:$7$位阶码,$1$位数符,$8$位尾数。若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围是()。
$A.-2^{63}\sim(1-2^{-8})\times2^{63}$
$B.-2^{64}\sim(1-2^{-7})\times2^{64}$
$C.-(1-2^{-8})\times2^{63}\sim2^{63}$
$D.-(1-2^{-7})\times2^{64}\sim(1-2^{-8})\times2^{63}$
解:首先$7$位移码,所以移码全$1$码值最大,求其补码为符号取反$011\,1111$,正数补码和原码相同,所以阶码最大为$63$。尾数用补码表示,所以补码全$1$表示最小,为$1.1111111=-1$,最大为$0.1111111=1-2^{-8}$,所以得到表达范围。 -->
### IEEE 754标准
#### 格式表示
**例题** 将十进制数$-0.75$转换为$IEEE\,754$的单精度浮点数格式表示。
解:将$-0.75D$首先转换为二进制为$-0.11B$,然后规格化变为$-1.1B\times0.1B$。其中阶码为$-1$($0.1B$就是代表$2$的负一次方)。
@@ -359,9 +375,23 @@ record.a(0x11)|record.a(0x01)|record.a(0x00)|record.a(0x00)|record.b|填充|reco
所以最后就是$1\,0111\,1110\,1000\,0000\,0000\,0000\,0000\,000$。
**例题** $float$型数据通常用$IEEE\,754$单精度浮点数格式表示。若编译器将$float$型变量$x$分配在一个$32$位浮点寄存器$FR1$中,且$x=—8.25$,则$FR1$的内容是()。
$A.C104\,0000H$
$B.C242\,0000H$
$C.C184\,0000H$
$D.C1C2\,0000H$
解:$A$。首先将$x$变为原码,$-8.25=-(8+0.25)=-1000.01=-2^3\times1.00001$。尾数最高位隐藏$1$,所以尾数为$0.00001$,然后计算阶码,$3=0000\,0011+0111\,1111=1000\,0010$。所以$IEEE\,754$表示为$1;1000\,0010;0000\,1000\,\cdots=1100\,0001\,0000\,0100\,\cdots=C104\,0000H$。注意最高位要隐含一个$1$。
#### 转换真值
**例题** $IEEE\,754$的单精度浮点数$C0\,A0\,00\,00H$的值是多少。
首先是$16$进制转二进制,每一个十六进制位转换为四个二进制位。所以得到$1100\,0000\,1010\,0000\,0000\,0000\,0000\,0000$。
解:首先是$16$进制转二进制,每一个十六进制位转换为四个二进制位。所以得到$1100\,0000\,1010\,0000\,0000\,0000\,0000\,0000$。
根据$IEEE\,754$标准,将$32$位分割为数符、阶码、尾数三个部分:数符为$1$,阶码为$100\,0000\,1$,尾数为$010\,0000\,0000\,0000\,0000\,0000$。
@@ -373,8 +403,78 @@ record.a(0x11)|record.a(0x01)|record.a(0x00)|record.a(0x00)|record.b|填充|reco
所以浮点数的真值为$-1.01B\times2\times2=-1.25\times4=-5$。
#### 标准表示范围
**例题** $float$类型(即$IEEE\,754$单精度浮点数格式)能表示的最大正整数是()。
$A.2^{126}-2^{103}$
$B.2^{127}-2^{104}$
$C.2^{127}-2^{103}$
$D.2^{128}-2^{104}$
解:$D$。表示是正数最大值,所以$S$为符号位可以不用考虑。阶码$E$是八位,所以表达的值是$1\sim254$(规定$255$和$0$都不可以使用),又使用移码加$127$,所以实际上表达的值是比原码小的,即表达最大值为$254-127=127$。尾数为$23$位,又隐藏最高位$1$,所以一共$24$位,正数的最大值为$1.11\cdots1$,所以能表达的最大正整数值为$1.11\cdots\times2^{127}=(2-2^{23})\times2^{127}=2^{128}-2^{104}$。
### 浮点数运算
#### 浮点数运算过程
**例题** 下列关于对阶操作说法正确的是()。
$A.$在浮点加减运算的对阶操作中,若阶码减小,则尾数左移
$B.$在浮点加减运算的对阶操作中,若阶码增大,则尾数右移;若阶码减小,则尾数左移
$C.$在浮点加减运算的对阶操作中,若阶码增大,则尾数右移
$D.$以上都不对
解:$C$。从计算规律来看,$ABC$说法都正确,应该选最全面的$B$。但是实际上对阶应该小阶向大阶对齐,所以只能阶码增大,而不能阶码减小。
**例题** 下列关于各种移位的说法正确的是()。
Ⅰ.假设机器数采用反码表示,当机器数为负时,左移时最高数位丢$0$,结果出错;右移时最低数位丢$0$,影响精度
Ⅱ.在算术移位的情况下,补码左移的前提条件是其原最高有效位与原符号位要相同
Ⅲ.在算术移位的情况下,双符号位的移位操作只有低符号位需要参加移位操作
$A.$Ⅰ、Ⅲ
$B.$仅Ⅱ
$C.$只有Ⅲ
$D.$Ⅰ、Ⅱ、Ⅲ
解:$D$。对于Ⅰ负数的反码除符号位外其他位与负数的原码相反,所以丢$0$就是丢原码的$1$,不难推出Ⅰ正确。如$5$位反码$10010$表示$-13$,右移$1$位变成$11001$为$-6$,影响精度,左移$1$位变成$10101$为$-10$,数据丢失。对于Ⅱ补码表示时,正数的符号位为$0$,左移最高位为$0$时,数据不会丢失;负数的符号位为$1$,左移最高位为$1$时,数据不会丢失。因此左移移走的最高位要与符号位相同。对于Ⅲ,双符号位的最高符号位代表真正的符号,而低位符号位用于参与移位操作以判断是否发生溢出,不用参与运算。
**例题** 下列关于舍入的说法,正确的是()。
Ⅰ不仅仅只有浮点数需要舍入,定点数在运算时也可能要舍入
Ⅱ.在浮点数舍入中,只有左规格化时可能要舍入
Ⅲ.在浮点数舍入中,只有右规格化时可能要舍入
Ⅳ.在浮点数舍入中,左、右规格化均可能要舍入
Ⅴ.舍入不一定产生误差
$A.$Ⅰ、Ⅲ、Ⅴ
$B.$Ⅰ、Ⅱ、Ⅴ
$C.$Ⅴ
$D.$Ⅰ、Ⅳ
解:$C$。舍入是浮点数的概念,定点数没有舍入的概念,因此Ⅰ错误。浮点数舍入的情况有两种:对阶、右规格化,因此Ⅱ、Ⅲ、Ⅳ错误。舍入不一定产生误差,如向下舍入$11.00$到$11.0$时是没有误差的,因此Ⅴ正确。
#### 浮点数加减
**例题** 已知十进制数$X=-\dfrac{5}{256}$,$Y=+\dfrac{59}{1024}$,按机器补码浮点运算规则计算$X-Y$,结果用二进制表示,浮点数格式如下︰阶符取$2$位,阶码取$3$位,数符取$2$位,尾数取$9$位。
解:首先要将十进制的真值转换为二进制原码。因为不是$IEEE\,754$标准,所以小数不用转换为$1.xxx$的格式,转成$0.xxx$的格式就可以了:$5D=101B$,$\dfrac{1}{256}=2^{-8}$,所以$X=-101\times2^{-8}=-0.101\times2^{-5}=-0.101\times2^{-101B}$。然后$59D=11 1011B$,$\dfrac{1}{1024}=2^{-10}$,从而$Y=+11 1011\times2^{-10}=0.111011\times2^{-4}=0.111011\times2^{-100B}$。

View File

@@ -261,14 +261,14 @@ k|2|3|4|5|6|7
:----:|:------:|:--:|:--:|:--:|:--:
0000 0000|0|+0|+0|0|-128
0000 0001|1|+1|+1|+1|-127
...
...|
0111 1101|125|+125|+125|+125|-3
0111 1110|126|+126|+126|+126|-2
0111 1111|127|+127|+127|+127|-1
1000 0000|128|-0|-127|-128|0
1000 0001|129|-1|-126|-127|1
1000 0010|130|-2|-125|-126|2
...
...|
1111 1101|253|-125|-2|-3|125
1111 1110|254|-126|-1|-2|126
1111 1111|255|-127|-0|-1|127
@@ -539,7 +539,11 @@ $y_n$(高位)|$y_{n+1}$(低位)|操作
+ 负数为$1.0xx\cdots x$的形式,其最大值表示为$1.01\cdots1$;最小值表示为$1.00\cdots0$。(负数的补码$1.0xx\cdots x$取反后就是$1.1xx\cdots x$)
+ 尾数的表示范围为$-1\leqslant M\leqslant-(\dfrac{1}{2}+2^{-n})$。(补码中强制规定$1.00\cdots0$就代表$-1$)
当浮点数尾数的基数为$2$时,原码规格化数的尾数最高位一定是$1$,补码规格化数的尾数最高位一定与尾数符号位相反。基数不同,浮点数的规格化形式也不同。当基数为$4$时,原码规格化形式的尾数最高两位不全为$0$;当基数为$8$时,原码规格化形式的尾数最高$3$位不全为$0$。
当浮点数尾数的基数为$2$时,原码规格化数的尾数最高位一定是$1$,补码规格化数的尾数最高位一定与尾数符号位相反。
基数不同,浮点数的规格化形式也不同。当基数为$4$时,原码规格化形式的尾数正数最高两位不全为$0$,负数最高两位不全为$1$;当基数为$8$时,原码规格化形式的尾数正数最高$3$位不全为$0$,负数正数最高$3$位不全为$1$。
如若基数为$8$,则$0.000111$和$1.111010$都不是规格化数,而$1.101010$是规格化。
对于浮点数,上溢和下溢有正负之分:负上溢<负数区<负下溢<$0$<正下溢<正数区<正上溢。