6.1 无符号数 有符号数
无符号数
无符号数只有数值部分,只需转换成二进制数,再存入计算机中的寄存器或者存储器中即可
- 寄存器的位数 反应了 无符号数的表示范围
- 8位寄存器表示无符号数的范围:0~255
- 16位寄存器表示无符号数的范围:0~65535
有符号数
有符号数包含 符号部分 和 数值部分,都存入计算机中的寄存器和存储器中即可
- 机器数:保存在计算机中符号数字化的数(符号、小数点的位置、数值,如 |0| |1011| )
- 真值:日常使用的带符号的数,如 +0.1011
原码表示法
- 整数 [x]原 =
{ x , 0 ≤ x < 2 n x,0≤x<2^{n} x,0≤x<2n
{ 2 n − x , − 2 n < x ≤ 0 2^{n}-x,-2^{n}<x≤0 2n−x,−2n<x≤0
x 为真值,n为整数的位数,','逗号分隔符号位和数值位,计算机不需要存储
如 x = +1110,[x]原 = 0,1110;
x = -1110,[x]原 = 24+1110 = 1,1110 - 小数 [x]原 =
{ x , 0 ≤ x < 1 x,0≤x<1 x,0≤x<1
{ 1 − x , − 1 < x ≤ 0 1-x,-1<x≤0 1−x,−1<x≤0
x 为真值,'.'小数点分隔符号位和数值位,计算机不需要存储
如 x = +0.1101,[x]原 = 0.1101;(真值x中的0是数值0,原码[x]原中的0表示符号位)
x = -0.1101,[x]原 = 1-(-0.1101) = 1.1101
x = +0.1000000,[x]原 = 0.1000000
补码表示法
- 模数:一个正数和一个负数互为补数,它们绝对值之和为模数
4位寄存器存储的二进制数 1011 - 1011 = 0000;1011 + 0101 = 10000 = 0000;所以 -1011 可以用 +0101代替(mod 24)。类似的 -011 ≡ +101 (mod 23),-0.1001 ≡ +0.0111 (mod 2)
- 整数 [x]补 =
{ x , 0 ≤ x < 2 n x,0≤x<2^{n} x,0≤x<2n
{ 2 n + 1 + x , − 2 n ≤ x < 0 2^{n+1}+x,-2^{n}≤x<0 2n+1+x,−2n≤x<0 ( m o d 2 n + 1 ) (mod 2^{n+1}) (mod2n+1)
x 为真值,n为整数的位数,','逗号分隔符号位和数值位,计算机不需要存储
例 x = +1010,[x]补 = 0,1010
x = -1011000,[x]补 = 27+1+(-1011000) = 100000000 - 1011000 = 1,0101000 - 小数 [x]补 =
{ x , 0 ≤ x < 1 x,0≤x<1 x,0≤x<1
{ 2 + x , − 1 ≤ x < 0 2+x,-1≤x<0 2+x,−1≤x<0 ( m o d 2 ) (mod 2) (mod2)
x 为真值,'.'小数点分隔符号位和数值位,计算机不需要存储
例 x = +0.1110,x = 0.1110
x = -0.1100000,[x]补 = 2 +(-0.1100000) = 10.0000000 - 0.1100000 = 1.0100000
- 已知原码求补码
当真值为 负 时,可以用 原码 除符号位之外其他位取反,末位加1 得到补码(同理 补码变原码,先末位减1,再除符号位之外其他位取反)
特殊地,[-1]补 = 10,0000 - 1.0001 = 1.1111,没有原码 - 已知补码求真值
[x]补 = 0.0001,x = +0.0001
[x]补 = 1.0001,x = [x]补 - 2 = 1.0001 - 10.0000 = -0.1111(或 末尾减1,再除符号位之外其他位取反,符号位变符号 1.0001 ~ 1.0000 ~ 1.1111 ~ -0.1111) - 已知补码(+)求补码(-)
若x > 0,[x]补 = 0. x 1 x 2 . . . x n 0.x_{1}x_{2}...x_{n} 0.x1x2...xn,则 [x]补 = 1. x ⃗ 1 x ⃗ 2 . . . x ⃗ n 1.\vec x_{1}\vec x_{2}...\vec x_{n} 1.x1x2...xn
规律:包括符号位,每位取反,末位加1,得到 -x 的补码
若x < 0,[x]补 = 1. x 1 x 2 . . . x n 1.x_{1}x_{2}...x_{n} 1.x1x2...xn,则 [-x]补 = 0. x ⃗ 1 x ⃗ 2 . . . x ⃗ n + 2 − n 0.\vec x_{1}\vec x_{2}...\vec x_{n} + 2^{-n} 0.x1x2...xn+2−n
反码表示法
- 整数 [x]反 =
{ x , 0 ≤ x < 2 n x,0≤x<2^{n} x,0≤x<2n
{ ( 2 n + 1 − 1 ) + x , − 2 n < x ≤ 0 (2^{n+1}-1)+x,-2^{n}<x≤0 (2n+1−1)+x,−2n<x≤0 ( m o d ( 2 n + 1 − 1 ) ) (mod (2^{n+1}-1)) (mod(2n+1−1))
x 为真值,n为整数的位数,','逗号分隔符号位和数值位,计算机不需要存储
如 x = +1101,[x]反 = 0,1101;
x = -1101,[x]反 = 24+1-1-1101 = 1,0010 - 小数 [x]反 =
{ x , 0 ≤ x < 1 x,0≤x<1 x,0≤x<1
{ ( 2 − 2 n ) + x , − 1 ≤ x < 0 (2-2^{n})+x,-1≤x<0 (2−2n)+x,−1≤x<0 ( m o d ( 2 − 2 n ) ) (mod (2-2^{n})) (mod(2−2n))
如 x = +0.1101,[x]反 = 0.1101;
x = -0.1010,[x]反 = 2-24+1-0.1010 = 1.1111-0.1010 = 1.0101
原/反/补码小结
- 最高位为符号位,用",“(整数)或”."(小数)将数值部分和符号部分分隔开
- 对于正数,原码 = 反码 = 补码
- 对于负数,符号位为1,原码的数值部分每位取反,末位加1 变补码,原码的数值部分每位取反 变反码
- 机器字长为8位,对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围见下表
二进制数 | 无符号数对应真值 | 原码对应真值 | 补码对应真值 | 反码对应真值 |
---|---|---|---|---|
00000000 | 0 | +0 | +0 | +0 |
00000001 | 1 | +1 | +1 | +1 |
… | … | … | … | … |
01111111 | 127 | +127 | +127 | +127 |
10000000 | 128 | -0 | -128 | -127 |
10000001 | 129 | -1 | -127 | ? |
… | … | … | … | … |
11111111 | 255 | -127 | -1 | ? |
移码表示法
-
整数 [x]移 = { 2 n + x , − 2 n ≤ x < 2 n 2^{n}+x,-2^{n}≤x<2^{n} 2n+x,−2n≤x<2n
x 为真值,n为整数的位数,','逗号分隔符号位和数值位
如 x = 10100,[x]移 = 25+10100 = 1,10100
x = -10100,[x]移 = 25-10100 = 0,01100 -
没有小数的移码定义
-
[+0]移 = [-0]移 = 1,00000(n=5)
n = 5时,最小真值为-25 = -100000,[-100000]移 = 25-100000 = 000000,最小真值的移码都为 0 -
移码与补码比较
x = +1100100,[x]移 = 1,1100100,[x]补 = 0,1100100
x = -1100100,[x]移 = 0,0011100,[x]补 = 1,0011100
补码和移码只差一个符号位
6.2 数的定点表示和浮点表示
定点表示
小数点按照约定方式标出
Sf |.
S1S2…Sn 或 Sf | S1S2…Sn.
定点机 | 小数定点机 | 整数定点机 |
---|---|---|
原码 | -(1-2-n) ~ +(1-2-n) | -(2n-1) ~ +(2n-1) |
补码 | -1 ~ +(1-2-n) | -2n ~ +(2n-1) |
反码 | -(1-2-n) ~ +(1-2-n) | -(2n-1) ~ +(2n-1) |
浮点表示
- 引入背景
编程困难,程序员要调节小数点位置
数的表示范围小,需要很长的机器字长才能表示两个大小相差很大的数据
数据存储单元的利用率很低 - 浮点数的一般表示形式:
N
=
S
∗
r
j
N = S * r^{j}
N=S∗rj
S:尾数,j:阶码(),r:尾数的基值
当 r = 2 时,N = 11.0101 = 0.110101 * 2(10) = 0.00110101 * 2(100)
浮点数的规格化
1. 浮点数的规格化形式
- r = 2 —— 尾数最高位为 1
- r = 4 —— 尾数最高 2 位不全为 0
- r = 8 —— 尾数最高 3 位不全为 0
基数不同,浮点数的规格化形式不同
2. 浮点数规格化
- r = 2 = 21
- 左规 —— 尾数左移 1 位,阶码减 1
- 右规 —— 尾数右移 1 位,阶码加 1
- r = 4 = 22
- 左规 —— 尾数左移 2 位,阶码减 1
- 右规 —— 尾数右移 2 位,阶码加 1
- r = 8 = 23
- 左规 —— 尾数左移 3 位,阶码减 1
- 右规 —— 尾数右移 3 位,阶码加 1
基数 r 越大,可表示的浮点数的范围越大
基数 r 越大,浮点数的精度越低
例如:设 m=4, n=10, r=2(尾数规格化后的浮点数表示范围)
- 最大正数: 2 + 1111 ∗ 0.1111111111 = 2 15 ∗ ( 1 − 2 − 10 ) 2^{+1111}*0.1111111111 = 2^{15}*(1-2^{-10}) 2+1111∗0.1111111111=215∗(1−2−10)
- 最小正数: 2 − 1111 ∗ 0.1000000000 = 2 − 15 ∗ 2 − 1 = 2 − 16 2^{-1111}*0.1000000000 = 2^{-15}*2^{-1} = 2^{-16} 2−1111∗0.1000000000=2−15∗2−1=2−16
- 最大负数: 2 − 1111 ∗ ( − 0.1000000000 ) = − 2 15 ∗ 2 − 1 = − 2 − 16 2^{-1111}*(-0.1000000000) = -2^{15}*2^{-1} = -2^{-16} 2−1111∗(−0.1000000000)=−215∗2−1=−2−16
- 最小负数: 2 + 1111 ∗ ( − 0.1111111111 ) = − 2 15 ∗ ( 1 − 2 − 10 ) 2^{+1111}*(-0.1111111111) = -2^{15}*(1-2^{-10}) 2+1111∗(−0.1111111111)=−215∗(1−2−10)
3. 机器零
- 当浮点数 尾数为 0 时,不论其阶码为何值,按机器零处理
- 当浮点数 阶码 ≤ 它所表示的最小数 时,不论其尾数为何值,按机器零处理
- 当阶码和尾数都用补码表示时
机器零为 x,xxxx;0.00…0;
(阶码 = -16)1,0000;x.xx…x - 当阶码用移码表示,尾数用阶码表示时,机器零为 0, 0000;0.00…0
练习题
- 计算机中的数据可以存放在___中
A. 主存
B. 都可以
C. 寄存器
D. 硬盘 - 下列对源码、补码和反码叙述正确的是
A. 三种机器数的最高位均为符号位。符号位和数值部分之间可用“.”(对于小数)和“,”(对于整数)隔开
B. 全部正确
C. 当真值为负时,原码、补码和反码的表示形式均相同,即符号位用“1”表示,数值部分和真值部分相同
D. 当真值为正时,原码和补码的表示形式不同,但其符号位都用“0”表示 - 假设浮点数的表示形式如下图,阶码和尾数都用原码表示,并且m=4,n=10,用非规格化形式表示时,下列叙述正确的是
A. 可以表示的最大正数为 2-15×2-9
B. 可以表示的最小正数为 2-15×2-9
C. 可以表示的最小负数为 -215×(1-2-10)
D. 可以表示的最大负数为 -2-16×2-10 - 已知X=0.a1a2a3a4a5a6(ai 为0或1),则当X>1/2时,ai 应取何值
A. a1-a6任意
B. a1=1,a2-a6至少有一个为1
C. a1=1,a2-a6任意
D. a1-a6至少有一个为1 - 设x为真值,x*为绝对值,说明[-x*]补=[-x]补在什么时候成立
A. 当x为负数时成立
B. 当x为正数时成立
C. 任何时候都不成立
D. 任何时候都成立 - 引入___的概念是为了消除减法操作
答案:补码 - 在计算机运行过程中,当浮点数发生溢出时,通常情况下计算机仍可以继续运行是 ___
A. 都可以
B. 下溢
C. 上溢
D. 都不可以 - “零”只有一种表示形式的表示法是 ___
答案:补码 - 在计算机中,以下选项属于小数点的表示方法的是___
A. 定点表示
B. 变长表示
C. 无正确答案
D. 定长表示 - 下列关于定点数和浮点数的叙述正确的是:
A. 浮点数在数的表示范围、数的精度和溢出处理方面均优于定点数。
B. 当浮点机和定点机中数的位数相同时,浮点数的表示范围比定点数的范围大的多。
C. 定点数在运算规则、运算速度及硬件成本方面优于浮点数。
D. 在溢出的判断方法上,浮点数是对规格化数的阶码进行判断,而定点数是对数值本身进行判断
答案:ABD? - 以下关于机器数和真值的说法正确的是____
A. 把符号“数字化”的数称为机器数
B. 把带“+”或“-”符号的数称为真值
C. 把符号“数字化”的数称为真值
D. 无正确答案 - 设x为整数,x的真值为25,以下选项与x相等的有____
A. 原码二进制串为 1,11001 的数
B. 反码二进制串为 0,11001 的数
C. 反码二进制串为 1,00110 的数
D. 补码二进制串为 0,11001 的数 - 将
+
19
128
+\frac{19}{128}
+12819 写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取 10 位,数符取 1 位,浮点数阶码取 5 位(含1位阶符)尾数规格化
答案:设 x = + 19 128 +\frac{19}{128} +12819
二进制形式( x = 0.0010011 )
定点表示( x = 0.0010011000 )
浮点规格化形式( x = 0.1001100000*2-10 )
定点机中 [x]原 = [x]补 = [x]反 = 0.0010011000
浮点机中 ( [x]原 = 1,0010; 0.1001100000 ),( [x]补 = 1,1110; 0. 1001100000 ),( [x]反 = 1,1101; 0. 1001100000 ) - 将
−
58
-58
−58 表示成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码为移码、尾数为补码的形式(其他要求同上13题)
答案:设 x = − 58 -58 −58
二进制形式 x = − 111010 x = -111010 x=−111010
定点表示 x = - 0000111010
浮点规格化形式 x = − ( 0.1001100000 ) ∗ 2 110 x = -(0.1001100000)*2^{110} x=−(0.1001100000)∗2110
定点机中 [x]原 = 1,0000111010,[x]补 = 1,1111000110,[x]反 = 1,1111000101
浮点机中 ( [x]原 = 0,0110; 1.1110100000 ),( [x]补 = 0,0110; 1. 0001100000 ),( [x]反 = 0,0110; 1. 0001011111 ),( [x]阶移、尾补 = 1, 0110; 1. 0001100000 )
6.3 定点运算
算术移位和逻辑移位的区别
专业名词解释
- 异步控制方式:各项操作按不同需要安排时间,不受统一时序控制
- 向量地址:是存放服务程序入口地址的存储单元地址,它由硬件形成
- 多重中断:当CPU执行某个中断服务程序的过程中,发生了更高级、更紧迫的事件,CPU暂停现行中断服务程序的执行,转去处理该事件的中断,处理完返回现行中断服务程序继续执行的过程。
- CMDR:控制存储器地址寄存器
- 总线判优:主设备对总线有控制权,从设备只能响应从设备发来的总线命令,对总线没有控制权。总线上信息的传送是由主设备启动的,如某个主设备欲与另一个设备(从设备)进行通信时,首先由主设备发出总线请求信号,若多个主设备同时要使用总线时,就由总线控制器的判优、仲裁逻辑按一定的优先等级顺序确定哪个主设备能使用总线。
- 系统的并行性:
- 进位链:是传递进位的逻辑电路
- 间接寻址:形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,即有效地址是由形式地址间接提供,这就是间接寻址。
- 微操作命令和微操作:控制部件通过控制线向执行部件发出各种控制命令,通常这种控制命令叫做微命令,而执行部件接受微命令后所执行的操作就叫做微操作。
- 快速缓冲存储器:比主存储器体积小但速度快,用于保有从主存储器得到指令的副本很可能在下一步为处理器所需的专用缓冲器。
- 基址寻址:将CPU中基址寄存器的内容,加上指令格式中的形式地址而形成操作数的有效地址,被引用的专用寄存器含有一个寄存器地址,地址字段含有一个相对于该地址的偏移量(通常是无符号的整数)。寄存器的引用可以使显式的,也可以是隐式的。(百度版)
- 流水线中的多发技术:在一个时钟周期内产生更多条指令结果,常见的多发技术有:超标量技术、超流水技术、超长指令字技术。
- 指令字长:是指机器指令中二进制代码的总位数。
- 周期窃取:指利用CPU不访问存储器的那些周期来实现DMA操作,此时DMA可以使用总线而不用通知CPU也不会妨碍CPU的工作。
- 双重分组跳跃进位:n 位全加器分成若干大组,大组内又分成若干小组,大组中小组的最高进位同时产生,大组与大组间的进位串行传送。
- 硬件向量法:通过向量地址来寻找设备的中断服务程序入口地址,而且向量地址是由硬件电路产生的。
- 总线:连接各个部件的信息传输线,是各部件共享的传输介质
- 指令流水:为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成。(百度版,原理,非定义)
- 寻址方式:指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能。分为指令寻址和数据寻址两大类。
- 微程序控制:微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的微指令,存放到一个只读存储器里.当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作
- RISC:精简指令系统计算机(Reduced Instruction Set Computer)
- 存储器带宽:单位时间内存储器存取的信息量,单位可用字/秒。
- 中断隐指令及功能:所谓中断隐指令,即在机器指令系统中没有的指令,它是CPU在中断周期内由硬件自动完成的一条指令。功能:(1)保护程序断点(2)寻找中断服务程序的入口地址。(3)关中断。
- 机器字长:是指计算机CPU能直接处理的二进制数据的位数,通常与CPU的寄存器位数有关,它决定了计算机的运算精度
- 时钟周期:CPU的晶振的工作频率的倒数
- 系统总线:指CPU、主存、I/O设备(通过I/O接口)各大部件之间的信息传输线
- 机器指令:CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
- 超流水线:将一些流水线寄存器插入到流水线段中,好比将流水线再分段。
- 超标量:指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上指令编译并执行。