系列文章目录
2.1 数据与文字的表示方法
2.1.1 数据格式
分为定点格式和浮点格式
定点格式
因为不用考虑小数点,所以只能表示纯小数和纯整数
纯小数小数点在 x n x_n xn和 x n − 1 x_{n-1} xn−1之间,纯整数在 x 0 x_0 x0右边。
小数的范围为: 0 ≤ ∣ x ∣ ≤ 1 − 2 − n 0≤|x|≤1-2^{-n} 0≤∣x∣≤1−2−n
整数的范围为: 0 ≤ ∣ x ∣ ≤ 2 n − 1 0≤|x|≤2^{n}-1 0≤∣x∣≤2n−1
浮点格式
浮点是有效数字和数的范围分开存储,比如0.9-e3,0.9在一个地方3又在一个地方,这样做的好处是可以存储足够大的数字。
十进制 N = 1 0 E . M N = 10^E.M N=10E.M
二进制 N = 2 e . M N = 2^e.M N=2e.M
M M M是尾数,就是纯小数,E是浮点数的指数,是纯整数
十进制数串表示方法
- 字符串形式
- 压缩的十进制数串形式,用16进制表示一个数字。
2.1.2 数的机器码表示
由于在机器中涉及数字的运算,还需要考虑到数字的正负符号,所以就衍生出机器码来方便运算。一般叫我们平常看见的数字叫做真值,在机器里方便运算的叫做机器码。
原码表示法
同号相加方便,减法比较难,引出了补码。
[ x ] 原 = { x , 2 n > x ⩾ 0 2 n − x = 2 n + ∣ x ∣ 0 ⩾ x > − 2 n [x]_原=\begin{cases}x, & 2^n>x\geqslant 0\\ 2^n-x=2^n+|x|& 0\geqslant x>-2^n \end{cases} [x]原={x,2n−x=2n+∣x∣2n>x⩾00⩾x>−2n
补码表示法
负数用补码表示的时候,可以将减法转换为加法。又因为求负数的补码还是要做减法,所以又引出了反码。
[ x ] 补 = { x , 2 n > x ⩾ 0 2 n + 1 + x = 2 n + 1 − ∣ x ∣ 0 ⩾ x > − 2 n [x]_补=\begin{cases}x, & 2^n>x\geqslant 0\\ 2^{n+1}+x=2^{n+1}-|x|& 0\geqslant x>-2^n \end{cases} [x]补={x,2n+1+x=2n+1−∣x∣2n>x⩾00⩾x>−2n
补码和真实值的关系
[ x ] 补 = x n x n − 1 x n − 2 . . . x 1 x 0 [x]_补=x_nx_{n-1}x_{n-2}...x_1x_0 [x]补=xnxn−1xn−2...x1x0
x = − 2 n x n + ∑ i = 0 n − 1 2 i x i x = -2^nx_n + \sum_{i=0}^{n-1}2^ix_i x=−2nxn+∑i=0n−12ixi
规则就是,如果是正整数,那么三码都是一样的,如果是负整数,符号位1不变,反码就是原码每个二进制取反,补码就是反码最低位+1。
[ x ] 原 = 01111010 [ x ] 原 = 11111010 [x]_原 = \bold{0}1111010 \ \ \ \ \ \ [x]_原 = \bold{1}1111010 [x]原=01111010 [x]原=11111010
[ x ] 反 = 01111010 [ x ] 反 = 10000101 [x]_反 = \bold{0}1111010 \ \ \ \ \ \ [x]_反 = \bold{1}0000101 [x]反=01111010 [x]反=10000101
[ x ] 补 = 01111010 [ x ] 补 = 10000110 [x]_补 = \bold{0}1111010 \ \ \ \ \ \ [x]_补 = \bold{1}0000110 [x]补=01111010 [x]补=10000110
移码表示法
通常用于表示浮点数的阶码 E E E,在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。
阶码有k位数,假定定点整数移码形式为 e k e k − 1 e k − 2 . . . e 2 e 1 e 0 e_ke_{k-1}e_{k-2}...e_2e_1e_0 ekek−1ek−2...e2e1e0(最高位为符号位),移码的传统定义是
[ e ] 移 = 2 k + e , 2 k > e ⩾ − 2 k [e]_移 = 2^k+e, 2^k>e\geqslant-2^k [e]移=2k+e,2k>e⩾−2k
主要是比较大小或者阶操作
利用二进制数,比较十进制数21和-21的大小
答:
x=21,对应的二进制数为+10101,【x】补=0,10101
x=-21,对应的二进制数为-10101,【x】补=1,01011
如果按照补码进行比较,则101011 > 010101,答案错误
x=10101 加上2的5次方 10101+100000=110101
x=-10101加上2的5次方 -10101+100000=001011
所以 110101>001011
移码: [x]移=2的n次方 + x
例如:
x=10100 则在【x】移=25+ x=100000+10100=1,10100
x=-10100 则在【x】移=25+ x=100000-10100=0,01100
同一个真值的移码和补码仅相差一个符号位
x=-10100 则在【x】补=1,01100 【x】移=0,01100
移码就是补码符号取反就可以了。
浮点数的机器表示
IEEE754标准中的格式表示浮点数。
S是浮点数的符号位。M是尾数,小数点位置放在尾数域最左有效位的右边。E是阶码。一个规格化的32位浮点数x的真值表示为
x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(−1)S∗(1.M)∗2E−127
2.1.3 字符与字符串的表示方法
除了数字外,还有文字语言、英文字母、标点符号等等。ASCII编码。
2.1.4 汉字的输入编码
汉字的输入编码
- 数字编码
- 拼音码
- 字形编码-五笔
汉字内码
用于汉字信息的存储、交换、检索等操作的机内代码,一般采用2字节表示。
汉字字模码
表示汉字字形代码,是汉字的输出形式。
2.1.5 校验码
发送发会在每个字添加一些校验位,用来确定字中出现错误的位置。检错码,奇校验或偶校验。
2.2 定点加法、减法运算
2.2.1 补码加法
[ x ] 补 + [ y ] 补 = [ x + y ] 补 ( m o d 2 n + 1 ) [x]_补+[y]_补=[x+y]_补\ \ \ (mod\ 2^{n+1}) [x]补+[y]补=[x+y]补 (mod 2n+1)
2.2.2 补码减法
[ x − y ] 补 = [ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补 ( m o d 2 n + 1 ) [x-y]_补 = [x]_补-[y]_补=[x]_补+[-y]_补\ \ \ (mod\ 2^{n+1}) [x−y]补=[x]补−[y]补=[x]补+[−y]补 (mod 2n+1)
2.2.3 溢出概念与检测方法
定点整数机器中,数有一个范围,如果运算超出范围,就叫“溢出”。
检测方式
- 变形补码
- 单符号位法
2.2.4 基本的二进制加法/减法器
2.3 定点乘法运算
人工算法与机器算法的同异性
定点计算中,两个原码表示的相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。
但是机器按着人工算法太慢了,得改进。
不带符号的阵列乘法器
带符号的列阵乘法器
2.4 定点除法运算
2.4.1 原码除法算法原理
两原码表示的数相除,商的符号由两数的符号按位相加求得,商的数值部分由两数的数值部分相除求得。
2.4.2 并行除法器
可控加法/减法(CAS)单元
加减交替的阵列除法器
2.5 定点运算器的组成
2.5.1 逻辑运算
逻辑非运算
求发,按位求它的反
逻辑加运算
按位求它们的“或”,逻辑或
逻辑乘运算
按位求它们的“与”,逻辑与
逻辑异运算
按位求它们的模2和,按位加
2.5.2 多功能算术/逻辑运算单元
基本思想
逻辑表达式
S 0 、 S 1 、 S 2 、 S 3 S_0、S_1、S_2、S_3 S0、S1、S2、S3分别控制输入 A i 、 B i A_i、B_i Ai、Bi,产生 Y i Y_i Yi和 X i X_i Xi。
X i = S 2 ˉ S 3 ˉ + S 2 ˉ S 3 ( A i ˉ + B i ˉ ) + S 2 S 3 ˉ ( A i ˉ + B i ) + S 2 S 3 A i ˉ X_i=\bar{S_2}\bar{S_3}+\bar{S_2}S_3(\bar{A_i}+\bar{B_i})+S_2\bar{S_3}(\bar{A_i}+B_i)+S_2S_3\bar{A_i} Xi=S2ˉS3ˉ+S2ˉS3(Aiˉ+Biˉ)+S2S3ˉ(Aiˉ+Bi)+S2S3Aiˉ
Y i = S 0 ˉ S 1 ˉ A i ˉ + S 0 ˉ S 1 A i ˉ B i + S 0 S 1 ˉ A i ˉ B i ˉ Y_i=\bar{S_0}\bar{S_1}\bar{A_i}+\bar{S_0}S_1\bar{A_i}B_i+S_0\bar{S_1}\bar{A_i}\bar{B_i} Yi=S0ˉS1ˉAiˉ+S0ˉS1AiˉBi+S0S1ˉAiˉBiˉ
带一下
X i = S 3 A i B i + S 2 A i B i ˉ ‾ X_i=\overline{S_3A_iB_i+S_2A_i\bar{B_i}} Xi=S3AiBi+S2AiBiˉ
Y i = A i + B 0 B i + S i B i ˉ ‾ Y_i=\overline{A_i+B_0B_i+S_i\bar{B_i}} Yi=Ai+B0Bi+SiBiˉ
F i = Y i ⨁ X i ⨁ C n + i F_i=Y_i\bigoplus X_i\bigoplus C_{n+i} Fi=Yi⨁Xi⨁Cn+i
C n + i + 1 = Y i + X i C n + i C_{n+i+1}=Y_i+X_iC_{n+i} Cn+i+1=Yi+XiCn+i
算术逻辑运算的实现
多一个控制端M,控制算术操作还是逻辑操作。
两级先行进位的ALU
2.5.3 内部总线
根据逻辑结构 单向传送总线、双向传送总线
根据总线位置 内部总线、外部总线
2.5.4 定点运算器的基本结构
单总线结构的运算器
单总线结构的运算器如(a)所示。由于所有部件都接到同一总线上,所以数据可以在任何两个寄存器之间,或者在任一个寄存器和ALU之间传送。
双总线结构的运算器
双总线结构的运算器如(b)所示。在这种结构中,两个操作数同时加到ALU进行运算,只需一次操作控制,而且马上就可以得到运算结果。
三总线结构的运算器
三总线结构的运算器如演示©所示。在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。
2.6 浮点运算方法和浮点运算器
2.6.1 浮点加法、减法运算
2.6.2 浮点乘法、除法运算规则
- 0操作数检查,如果被除数 x x x为0,则商为0,如果除数因为0,则商为 ∞ \infty ∞
- 阶码加/减操作
- 尾数乘/除操作
- 结果规格化
- 舍入处理
- 确定积的符号
2.6.3 浮点运算流水线
流水线原理
把输入的任务分割为一系列子任务,使各子任务能在流水线的各个阶段并发地执行。
S i S_i Si过程段,缓存寄存器(L),统一的的时钟(C)。
流水线浮点加法器
总结
数字在计算机里存储和运算