组原学习笔记五:计算机的运算方法

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 =CfC

当Cf与C值相同时,不产生溢出;不同时产生溢出


判断方法三:(双符号位判断溢出:变形补码[x]补’) 溢 出 = S f 1 ⨁ S f 2 溢出 = Sf1 \bigoplus Sf2 =Sf1Sf2

第一符号位与第二符号位不同时产生了溢出


4. 乘法运算

乘法运算可通过加法和移位实现。实现硬件:3个寄存器,具有移位功能

原码乘法:

原码一位乘原码两位乘
符号位 x 0 ⨁ y 0 x_0 \bigoplus y_0 x0y0 x 0 ⨁ y 0 x_0 \bigoplus y_0 x0y0
操作数绝对值绝对值的补码
移位逻辑右移算术右移
移位次数nn/2 (n为偶数)
最多加法次数nn/2+1 (n为偶数)

原码两位乘步骤:

补码乘法(未讲)

5. 除法运算

原码除法中由于对余数的处理不同,又可分为恢复余数法和不恢复余数法(加减交替法)

不恢复余数法例题:

补码除法(未讲)


6.4 浮点四则运算

1. 浮点加减运算

浮点数加减运算步骤:

  1. 对阶,使两数的小数点位置对齐:小阶向大阶看齐
  2. 尾数求和
  3. 规格化
  4. 舍入
  5. 溢出判断
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. 浮点加减运算中的舍入

在对阶和右规过程中,可能出现尾数末位丢失引起误差的情况,需要考虑舍入。舍入方法如下:

  1. 0舍1入法
  2. 恒置"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. 快速进位链

快速进位链包括并行加法器、串行进位链、并行进位链(了解)

(完)

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值