考纲
(一)数制与编码
进位计数制及其相互转换;定点数的编码表示
(二)运算方法和运算电路
基本运算部件:加法器;算术逻辑单元(ALU)
加/减运算:补码加/减运算器;标志位的生成
乘/除运算:乘/除法运算的基本原理;乘法电路和除法电路的基本结构
(三)整数的表示和运算
无符号整数的表示和运算;有符号整数的表示和运算
(四)浮点数的表示和运算
浮点数的表示:IEEE 754标准;浮点数的加/减运算
数制与编码
进制转换
原码 补码 反码 移码
原码
最高位符号位,后面实际数值,
如 0110 为 +6 ,1110 为 -6
n位原码表示带符号数的范围为 $-2^{n-1}+1 到 2^{n-1}-1$
反码
最高位符号位,正数与原码一致,负数数值位全部取反
0110 是+6
1001 是 -6
补码
最高位符号位,正数与原码一致,符号位为1时,后面数值需要取反加一
0110是+6
1010是-6
n位补码表示带符号数的范围为 $-2^{n-1}$到$2^{n-1}-1$
移码
408中移码只有IEEE754中有涉及,到下面再讲
补码和原码理解
我们可以用一个时钟来进行理解这个。
首先需要明确,对于计算机来说,所有数都是机器数,各种码的定义是人类加上的
以4位举例,首先是无符号数,也就是能从0表示到15
| 二进制 (Binary) | 十进制 (Decimal) | 十六进制 (Hexadecimal) |
|---|---|---|
0000 |
0 | 0 |
0001 |
1 | 1 |
0010 |
2 | 2 |
0011 |
3 | 3 |
0100 |
4 | 4 |
0101 |
5 | 5 |
0110 |
6 | 6 |
0111 |
7 | 7 |
1000 |
8 | 8 |
1001 |
9 | 9 |
1010 |
10 | A |
1011 |
11 | B |
1100 |
12 | C |
1101 |
13 | D |
1110 |
14 | E |
1111 |
15 | F |
这时,我们需要表示负数,我们天然能想到的是将后半部分对应到负数去,一半给正数,一半给负数。
0000 到 0111 (0 到 7) 作为正数部分。
1000 到 1111 (8 到 15) 作为负数部分。
那么1000 到 1111 (8 到 15) 应该如何对应呢?
- 直接将1作为符号位,后面当作数值,这个也就是原码
0001是+1,那么我们就让1001表示-1。(符号位变了,数值位一样)0010是+2,那么我们就让1010表示-2。- ...·
0111是+7,那么我们就让1111表示-7。
这个想法产生了原码 (Sign-Magnitude)。它非常易于人类阅读。
但是机器直接使用原码计算是会出错的
比如2-1,也就是2+(-1)+2的原码是0010-1的原码是10010010 + 1001 = 10111011在原码里表示什么?是-3。
结果2 - 1 = -3,这显然是错误的。所以,原码虽然直观,但不能用于计算机的直接运算。
-
我们要让机器去能真的直接正确作对这个计算,我们回到时钟,在十二小时的时钟上,-2也就是倒着转两格,+10也就是正着转十格,最终的效果实际上一致的,回到我们上面的划分为十六格的时钟,
-
想表示
-1:从0000后退一步是什么?是1111。好,那我们就规定1111代表-1。 -
想表示
-2:从0000后退两步是什么?是1110。好,那我们就规定1110代表-2。 -
...
-
想表示
-8:从0000后退八步是什么?是1000。好,那我们就规定1000代表-8。
现在就将0000到1111分配给了-8到 7,如下图所示,这其实就是补码,补码在计算机中可以统一加减法
现在,我们用补码再来算一遍2 - 1,也就是2 + (-1): -
+2的补码是0010 -
-1的补码是1111 -
0010 + 1111 = 10001 -
因为是4位系统,最高位的进位
1会自然溢出被丢掉,剩下0001。 -
0001在补码里表示什么?是+1。
-
运算方法和运算电路
基本运算部件:加法器;算术逻辑单元(ALU) 加/减运算:补码加/减运算器;标志位的生成
-
一位全加器
和表达式:$S_i=A_i \oplus Bi \oplus C{i-1}$(当$A_i$、$Bi$、$C{i-1}$中有奇数个1时,$S_i=1$,否则$S_i=0$)
进位表达式:$C_i=A_i B_i+(A_i \oplus Bi)C{i-1}$
一位全加器主要的作用是将$A_{i}$和$Bi$和来自低位传入的进位$C{i-1}$ ,将这三个进行异或,得到本位的结果,将AB异或再与低位进位,在和AB或运算得到本次的进位
-
串行进位加法器
将一位全加器的进位接入下一位的$C_{i-1}$中组成串行进位,由于需要一位一位计算进位,会有较大延迟所以有下方并行进位加法器 -
并行进位加法器
只需知道并行进位会比串行加法器算的更快 -
带标志加法器
OF(OVERFLOW)溢出标志位用来表示带符号加减法,是否溢出,OF=1代表溢出,计算机中的实际的计算方式是$Cn \oplus C{n-1}$也就是最高位的进位和次高位的进位进行异或
CF(CRAAYFLOW)进位/借位标志位用来表示无符号数加减法是否溢出,计算机中的实际计算方式是$C{in} \oplus C{out}$
ZF(ZEROFLOW)零标志位,ZF=1时表示结果F等于0
SF(SIGNFLOW)符号标志位 SF=1为负在计算机中,加法器不知道你运行的到底是带符号加法还是无符号加减法,标志位只是根据硬件电路去产生,所以我们做题的时候直接按给出的表达式手算,直接根据这个数合理的表示范围去判断溢出,而不是通过二进制去异或计算到底溢出没有
-
ALU
ALU中需要知道的是ALUop的位数决定ALU能进行的操作数,3位ALUop能进行8种操作乘法运算的基本原理和电路实现


