6.1 无符号数和有符号数
无符号数:没有符号的数。机器字长的全部二进制位均为数值位,没有符号位。
有符号数:↓
1. 机器数与真值
把符号数字化的数称为机器数,而把带“+”、“-”符号的数称为真值。
符号位0表示正数,1表示负数。
符号位与数值位所构成的机器数编码方式有:原码、补码、反码和移码。
2. 原码
原码为符号位加数的绝对值,0正1负
整数的符号位与数值位之间用逗号隔开
小数的符号位与数值位之间用小数点隔开
例: x = +1110 [x]原 = 0,1110
x = - 1110 [x]原 = 1,1110
x = +0.1010 [x]原 = 0.1010
x = - 0.1010 [x]原 = 1.1010
原码中的“零”有两种形式
[+0.0000]原 = 0.0000
[- 0.0000]原 = 1.0000
3. 补码
当真值为正数时,补码就是原码
当真值为负数时,补码是原码的每位取反,末位加1,不包括符号位
例: x = +1110 [x]补 = 0,1110
x = - 1110 [x]补 = 1,0010
x = +0.1010 [x]补 = 0.1010
x = - 0.1010 [x]补 = 1.0110
由 [x] 补 求 [-x] 补 :
连符号位一起每位取反,末位加1。
例: [x]补 = 11010101 [-x]补 = 00101011
由 [x] 补 求 [x/2] 补 :
将 [x] 补 的符号位和数值位一起向右移动一次,符号位移走后保持原来的值不变。
例: [x]补 = 10101000 [x/2]补 = 11010100
补码表示“零”是唯一的
4. 反码
当真值为正数时,反码就是原码
当真值为负数时,补码是原码的每位取反,不包括符号位
例: x = +1110 [x]反 = 0,1110
x = - 1110 [x]反 = 1,0001
x = +0.1010 [x]反 = 0.1010
x = - 0.1010 [x]反 = 1.0101
反码中的“零”也有两种形式
[+0.0000]反 = 0.0000
[- 0.0000]反 = 1.1111
5. 移码
计算机当中的数据通常用补码表示(因为进行加减运算时补码比较方便),但是补码表示很难直接判断其真值的大小,所以引入移码。
移码定义:[x]移 = 2n + x
规律:移码是补码的符号位取反
例: x = +10100 [x]移 = 25 +10100 = 1,10100 [x]补 =0,10100
x = - 10100 [x]移 = 25 - 10100 = 0,01100 [x]补 =1,01100
移码表示“零”也是唯一的
求分数的原码补码反码习题中的十进制分数转化成二进制方法:
直接把分子先百化成二进制,这个很简单,分子一直除以2依次取余再反过来就度是二进制了,然后解决分母:分母是64的话,2的6次方就是64,再把刚刚求得的二进制的小数点往左退6位就是这个分数的二进制数了。比如-27/64,-27=-11011,小数点往左移动回6位=-0.011011=1.011011 补码:除了符号位,各位取反末位加1=1.100101. 反码=补码-1,所以直接对原码除了符号为求反即可。
6.2 数的定点表示和浮点表示
1. 定点表示
定点表示是小数点按照约定方式标出
定点机:用定点数表示的机器,根据小数点位置的不同分为小数定点机和整数定点机。
2. 浮点表示
浮点数的一般形式:N = S × r j
其中 S:尾数 j:阶码 r:基数
为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,并将尾数最高位为1的浮点数称为规格化数
例:N = 11.0101 = 0.110101 × 2 10
浮点数的表示形式:
浮点机的数据格式:前面是阶码部分,后面是尾数部分,尾数部分和阶码部分用分号分隔。
例:x = 0.1001100000 × 2 -10 [x]原 = 1,0010 ; 0.1001100000
左规和右规:
规格化时,尾数左移一位,阶码减1,这种规格化称为向左规格化,简称左规
规格化时,尾数右移一位,阶码加1,这种规格化称为向右规格化,简称右规
3. IEEE 754 标准
S为数符,表示浮点数的正负,它与其有效位(尾数)是分开的。阶码用移码表示。尾数的最高位1被隐藏(因为尾数部分通常是规格化表示,即非0的有效位最高位总是1,所以在表示中将这个1省略)。
6.3 定点运算
1. 移位运算
移位运算:数值相对于小数点左移,绝对值扩大;相对于小数点右移,绝对值缩小。
移位的意义:采用移位和加法相结合,可以实现乘除运算。
1. 1 算术移位规则:(不论是正数还是负数,移位后符号位不变)
真值 | 码制 | 添补代码 |
---|---|---|
正数 | 原码、补码、反码 | 0 |
负数 | 原码 | 0 |
负数 | 补码 | 左移添0、右移添1 |
负数 | 反码 | 1 |
- 对于正数,三种机器数移位后符号位均不变,左移时最高数位丢1,结果出错;右移时最低数位丢1 ,影响精度。
- 对于负数,三种机器数移位后符号位均不变。负数的原码左移时最高数位丢1,结果出错;右移时最低数位丢1 ,影响精度。
负数的补码左移时最高数位丢0,结果出错;右移时最低数位丢1 ,影响精度。
负数的反码左移时最高数位丢0,结果出错;右移时最低数位丢0 ,影响精度。
1. 2 逻辑移位规则:
逻辑左移 | 高位移丢,低位补0 |
---|---|
逻辑右移 | 低位移丢,高位补0 |
1. 3 算数移位和逻辑移位的区别:
- 算术移位:有符号数的移位
- 逻辑移位:无符号数的移位
2. 加法或减法运算
现代计算机都采用补码进行加减运算,补码加减运算的基本公式如下:
- 加法
整数:[A]补 + [B]补 = [A+B]补 (mod 2n+1)
小数:[A]补 + [B]补 = [A+B]补 (mod 2) - 减法
整数: [A-B]补 = [A]补 + [-B]补 (mod 2n+1)
小数: [A-B]补 = [A]补 + [-B]补 (mod 2)
连同符号位一起相加,产生的进位丢掉
3. 溢出及其判断
在计算机中,由于机器码的尾数通常是给定的,因此,计算机中数的表示范围是有限的,若两数进行加减运算的结果超过了给定的范围,就称为溢出。一旦出现溢出,必须及时处理,否则会出现错误。
溢出原因:
- 两个正数太大:产生进位而改变了符号位
- 两个负数绝对值太大:对应的补码太小,不能向符号位产生进位,使符号位相加后,向前产生进位。
判断方法一:("+"号表示或者; SA表示A数符号位为0, 反之为1; SB表示B数符号位为0, 反之为1; Sf表示运算结果符号位为0, 反之为1.) 溢 出 = S A ‾ S B ‾ S f + S A S B S f ‾ 溢出 = \overline{SA}\overline{SB}Sf + SASB\overline{Sf} 溢出=SASBSf+SASBSf
判断方法二:(Cf = 0表示符号位相加没有产生进位; C = 0表示最高数值位相加没有产生进位) 溢 出 = C f ⨁ C 溢出 = Cf \bigoplus C 溢出=Cf⨁C
当Cf与C值相同时,不产生溢出;不同时产生溢出
判断方法三:(双符号位判断溢出:变形补码[x]补’) 溢 出 = S f 1 ⨁ S f 2 溢出 = Sf1 \bigoplus Sf2 溢出=Sf1⨁Sf2
第一符号位与第二符号位不同时产生了溢出
4. 乘法运算
乘法运算可通过加法和移位实现。实现硬件:3个寄存器,具有移位功能
原码乘法:
原码一位乘 | 原码两位乘 | |
---|---|---|
符号位 | x 0 ⨁ y 0 x_0 \bigoplus y_0 x0⨁y0 | x 0 ⨁ y 0 x_0 \bigoplus y_0 x0⨁y0 |
操作数 | 绝对值 | 绝对值的补码 |
移位 | 逻辑右移 | 算术右移 |
移位次数 | n | n/2 (n为偶数) |
最多加法次数 | n | n/2+1 (n为偶数) |
原码两位乘步骤:
补码乘法(未讲)
5. 除法运算
原码除法中由于对余数的处理不同,又可分为恢复余数法和不恢复余数法(加减交替法)
不恢复余数法例题:
补码除法(未讲)
6.4 浮点四则运算
1. 浮点加减运算
浮点数加减运算步骤:
- 对阶,使两数的小数点位置对齐:小阶向大阶看齐
- 尾数求和
- 规格化
- 舍入
- 溢出判断
2. 浮点加减运算中的规格化
规格化数的定义:r = 2 1/2 ≤ |S| <1
规格化数的判断:
S > 0 | 规格化形式 | S < 0 | 规格化形式 |
---|---|---|---|
真值 | 0.1 xx…x | 真值 | -0.1 xx…x |
原码 | 0.1 xx…x | 原码 | 1.1 xx…x |
补码 | 0.1 xx…x | 补码 | 1.0 xx…x |
反码 | 0.1 xx…x | 反码 | 1.0 xx…x |
特例:
- S = -1/2 = -0.100…0 [S]原 = 1.100…0 [S]补 = 1.100…0
按照规格化定义来看-1/2符合规格化形式,但 [-1/2]补不满足上述判断中的0.1或1.0,所以我们认为 [-1/2]补不是规格化的数
- S = -1 [S]补 = 1.000…0
按照规格化定义来看-1不符合规格化形式,但 [-1]补满足上述判断中的1.0,所以我们认为 [-1]补是规格化的数
浮点加减运算中的规格化情况:
- 左规:补码不符合规格化形式时需要左规,尾数左移一位,阶码减1,直到数符和第一数位不同为止
- 右规:当尾数溢出时(>1)时需要右规,即当尾数出现01.xxxx或10.xxxx时
3. 浮点加减运算中的舍入
在对阶和右规过程中,可能出现尾数末位丢失引起误差的情况,需要考虑舍入。舍入方法如下:
- 0舍1入法
- 恒置"1"法
4. 溢出及其判断
- 上溢:阶码出现 01,xxx…x
- 下溢:阶码出现 10,xxx…x
溢出处理:
- 当上溢时,机器判定为出错
- 当下溢时,机器将该数值按照0处理
5. 浮点乘除运算
x = Sx · 2jx
y = Sy · 2jy
乘法:x·y = (Sx · Sy) × 2jx + jy
除法:x/y = (Sx / Sy) × 2jx - jy
浮点运算部件:阶码运算部件、尾数运算部件
6.5 算术逻辑单元
1. ALU电路
ALU:算术逻辑单元。属于组合逻辑电路。
74181:四位ALU,一种组合逻辑电路。M = 0时进行算术运算;M = 1时进行逻辑运算
数字电路分为组合逻辑电路和时序逻辑电路
- 组合逻辑电路输出直接取决于输入
- 时序逻辑电路输出不仅仅取决于输入,还取决于原先的状态
时序逻辑电路具有记忆功能
2. 快速进位链
快速进位链包括并行加法器、串行进位链、并行进位链(了解)
(完)