diff --git a/Computer-Organization/1-data-representation-and-operation-ex.md b/Computer-Organization/1-data-representation-and-operation-ex.md index 4797c0a..a8b0e8d 100644 --- a/Computer-Organization/1-data-representation-and-operation-ex.md +++ b/Computer-Organization/1-data-representation-and-operation-ex.md @@ -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$。 + + ### 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}$。 diff --git a/Computer-Organization/1-data-representation-and-operation.md b/Computer-Organization/1-data-representation-and-operation.md index 977e669..4d0d96b 100644 --- a/Computer-Organization/1-data-representation-and-operation.md +++ b/Computer-Organization/1-data-representation-and-operation.md @@ -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$<正下溢<正数区<正上溢。