1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-02-10 22:25:48 +08:00
This commit is contained in:
Didnelpsun
2022-06-30 22:54:18 +08:00
parent dd62379523
commit 8064be30ee
2 changed files with 34 additions and 3 deletions

View File

@@ -145,8 +145,30 @@ $D.X_1=1$
解:$B$。其实就是溢出如何判断。溢出判别法有两种适用于此种情况:一是加一个符号位变为双符号位,然后左移,若两符号位不同则溢出,因此$X_0\neq X_1$时溢出;二是数值位最高位进位和符号位进位不同则溢出,同样可知$X_0\neq X_1$时溢出。
**例题** 一个$8$位寄存器内的数值为$11001010$,进位标志寄存器$C$为$0$若将此8位寄存器循环左移不带进位位$1$位,则该$8$位寄存器和标志寄存器内的数值分别为()。
$A.10010100\,1$
$B.10010101\,0$
$C.10010101\,1$
$D.10010100\,0$
解:$C$。不带进位位的循环左移将最高位进入最低位和标志寄存器$C$位,所以高位$1$进入了进位位,也变为了数值的末尾。如果带则进位位的数据一同进行循环左移。
#### 定点数加减运算
**例题** 有符号整数加减、无符号整数加减运算,这四种运算能否利用同一个加法器辅助电路实现?简述理由。
解:能。$n$位加法器实现的是模$2^n$无符号整数加法运算。(即二进制加减时需要考虑$n$位之间的借位和进位,这是一般的二进制加减法,如果是模二运算则相当于对每位进行异或运算,不需要考虑各位之间的借位和进位,如之前的$CRC$校验码运算)
对于无符号整数$a$和$b$,对$a+b$可以直接用加法器实现,而$a-b$可用$a$加$-b$的补码实现,即$a-b=a+[-b]_{\text{补}}$$\mod 2^n$),这是因为$a-b$如果不发生溢出则$a-b>0$$a-b$的原码也是补码,所以原码计算可以使用补码计算来达成,所以$n$位无符号整数加减运算都可在$n$位加法器中实现,辅助电路逻辑用于计算减数$b$的相反数的补码。
由于有符号整数用补码表示,补码加减运算公式为$[a+b]_{\text{补}}=[a]_{\text{补}}+[b]_{\text{补}}$$\mod 2^n$$[a-b]_{\text{补}}=[a]_{\text{补}}+[-b]_{\text{补}}$$\mod 2^n$),所以$n$位有符号整数加减运算都可在$n$位加法器中实现,辅助电路逻辑用于计算减数$b$的相反数的补码。
所以辅助电路在原码补码减肥中都起到同样的效果。
**例题** 设机器字长为$8$位含一位符号位,$A=15$$B=-24$,求$A+B$和$A-B$的补码。
解:$A=+1111$,从而原码补码为$0000\,1111$$B=-11000$,所以原码为$1001\,1000$,反码为$1110\,0111$,补码为$1110\,1000$。

View File

@@ -648,9 +648,9 @@ $y_n$(高位)|$y_{n+1}$(低位)|操作
+ 正数为$0.1xx\cdots x$的形式,其最大值表示为$0.11\cdots1$;最小值表示为$0.10\cdots0$。
+ 尾数的表示范围为$\dfrac{1}{2}\leqslant M\leqslant(1-2^{-n})$。
+ 负数为$1.1xx\cdots x$的形式,其最大值表示为$1.10\cdots0$;最小值表示为$1.11\cdots1$。
+ 尾数的表示范围为$-(1-2^{-n})\leqslant M\leqslant\dfrac{1}{2}$。
+ 尾数的表示范围为$-(1-2^{-n})\leqslant M\leqslant-\dfrac{1}{2}$。
2. 用补码表示的尾数进行规格化,符号位与最高位数值一定相反:
+ 正数为$0.1xx\cdots x$的形式,其最大值表示为$0.11\cdots1$;最小值表示为$0.10\cdots0$。
+ 正数为$0.1xx\cdots x$的形式,其最大值表示为$0.11\cdots1$;最小值表示为$0.10\cdots0$。跟原码一致。
+ 尾数的表示范围为$\dfrac{1}{2}\leqslant M\leqslant(1-2^{-n})$。
+ 负数为$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$
@@ -663,6 +663,15 @@ $y_n$(高位)|$y_{n+1}$(低位)|操作
对于浮点数,上溢和下溢有正负之分:负上溢<负数区<负下溢<$0$<正下溢<正数区<正上溢。
#### 定点浮点区别
假设定点数和浮点数的字长相同。
+ 浮点数表示范围更大。
+ 浮点数精度降低。(由于只取出一部分数据,还有部分长度表示阶码等,所以用于表示尾数的字长减少)
+ 浮点数运算更复杂。(需要规格化,需要做尾数运算和阶码运算)
+ 浮点数只有规格化后才能判断是否溢出。
### IEEE 754标准
$IEEE\,754$标准就是浮点数标准,为了解决计算机中阶码、尾数使用什么码来表示,各取多少位的问题。
@@ -687,7 +696,7 @@ long double|临时浮点数|1|15|64|80|3FFFH|16383
+ 令数符为$S$,阶码为$E$,尾数为$M$。
+ 规格化的短浮点数的真值为$(-1)^S\times 1.M\times2^{E-127}$。
+ 规格化的长浮点数的真值为$(-1)^S\times 1.M\times2^{E-1023}$。
+ 短浮点数和长浮点数都隐含一位尾数最高位$1$,而临时浮点数没有隐含位。
+ 短浮点数和长浮点数都隐含一位尾数最高位$1$即$0.11$为$+1.11$$1.11$为$-1.11$而临时浮点数没有隐含位。
#### IEEE 754取值范围