diff --git a/Computer-Organization/1-data-representation-and-operation-ex.md b/Computer-Organization/1-data-representation-and-operation-ex.md index 980fb31..ccfbb02 100644 --- a/Computer-Organization/1-data-representation-and-operation-ex.md +++ b/Computer-Organization/1-data-representation-and-operation-ex.md @@ -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$。 diff --git a/Computer-Organization/1-data-representation-and-operation.md b/Computer-Organization/1-data-representation-and-operation.md index dbf9a9d..8a550c2 100644 --- a/Computer-Organization/1-data-representation-and-operation.md +++ b/Computer-Organization/1-data-representation-and-operation.md @@ -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取值范围