计组Chapter1:数据的表示和计算

数据的表示和计算

一、定点整数

设位数为8位

原码表示范围:1111 1111 ~ 0111 1111 即:-127 ~ 127

补码表示范围:1000 0000 ~ 0111 1111 即:-128 ~ 127

规定定点整数 补码 1000 0000 为 -128

二、定点小数

设位数为8位

原码表示范围:1.111 1111 ~ 0.111 1111 即:-(1-2^n) ~ 1-2^n

image-20190308115743204

补码表示范围:1.000 0000 ~ 0.111 1111 即:-1 ~ 1-2^n

规定定点小数 补码 1.000 0000 为 -1.0

具体:to be added…

三、补码加减法

1.补码加法

#####核心公式:「公式对定点整数 x、y、x+y的绝对值不超过2^n-1都成立 」

[ x ] 补 + [ y ] 补 = [ x + y ] 补 / / m o d 2 n ∗ 2 [x]补+[y]补 = [x+y]补 //mod 2^n*2 [x]+[y]=[x+y]//mod2n2

可分四种情况来证明:

######(1)x、y 都为正数,则 x+y>0

正数的补码与原码相同,由数据补码定义可得:
[ x ] 补 + [ y ] 补 = x + y = [ x + y ] 补 / / m o d 2 n ∗ 2 [x]补+[y]补 = x+y=[x+y]补//mod 2^n*2 [x]+[y]=x+y=[x+y]//mod2n2

(2)x>0 , y<0 , 则 x+y>0 或 x+y<0

由补码定义:

[x]补 = x , [y]补 = 2^(n+1) + y,则:
[ x ] 补 + [ y ] 补 = x + 2 n ∗ 2 + y = 2 n ∗ 2 + ( x + y ) = [ x + y ] 补 [x]补+[y]补 =x+2^n*2+y=2^n*2+(x+y)= [x+y]补 [x]+[y]=x+2n2+y=2n2+(x+y)=[x+y]

(3)x<0 , y>0 , 则 x+y>0 或 x+y<0

此种情况同(2)

(4)x<0 , y<0 , 则 x+y<0

由补码定义:

[x]补 = 2^(n+1) +x , [y]补 = 2^(n+1) + y,则:
[ x ] 补 + [ y ] 补 = x + 2 n ∗ 2 + 2 n ∗ 2 + y = 2 n ∗ 2 + ( 2 n ∗ 2 + x + y ) = [ x + y ] 补 [x]补+[y]补 =x+2^n*2+2^n*2+y=2^n*2+(2^n*2+x+y)= [x+y]补 [x]+[y]=x+2n2+2n2+y=2n2+(2n2+x+y)=[x+y]

总结:在模2^(n+1)意义下,任意两数的补码之和等于两数和的补码

补码加法特点:(e.g x = +1011,y=-0101,求x+y)

​ [x]补 = 0 1 0 1 1

​ [y]补 = 1 1 0 1 1

[x+y]补 = (1) 0 0 1 1 0 = 0 0 1 1 0

  1. 符号位要作为数的一部分参加运算。

  2. 在模2(n+1)意义下相加,超过2(n+1)的进位要舍去。

2.补码减法
核心公式:「公式对定点整数 x、y、x+y的绝对值不超过2^n-1都成立 」

[ x − y ] 补 = [ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补 / / m o d 2 n ∗ 2 [x-y]补 =[x]补-[y]补=[x]补+[-y]补 //mod 2^n*2 [xy]=[x][y]=[x]+[y]//mod2n2

现只需证明:
[ − y ] 补 = − [ y ] 补 [-y]补=-[y]补 [y]=[y]

因为 [x+y]补 = [x]补 + [y]补    mod(2^(n+1))
所以 [y]补 = [x+y]补 - [x]补  (1)

又   [x-y]补 = [x+(-y)]补 = [x]补 + [-y]补
所以 [-y]补 = [x-y]补 - [x]补  (2)

由(1)+(2)得:
[y]补 + [-y]补 = [x+y]补 + [x-y]补 - [x]补 - [x]补
              = [x+y+x-y]补 - [x]补 - [x]补
              = 0
              
故:[-y]补 = -[y]补 得证。

注意:从 [y]补 求 [-y]补 法则:

对 [y]补 包括符号位在内 :求反且末位加一,即得 [-y]补

由真值的原码求补码:不包括符号位取反加一,与补码减法规则区分

3.溢出检测

同笔记:只有同号相加才会发生溢出。

四、乘法运算

1.一位乘法运算

1)原码1位乘法「符号位不参加运算」

原码一位乘法运算需要 3 个寄存器:

A寄存器:存部分积与最后乘积的高位部分。

B寄存器:被乘数 X。

C寄存器:乘数 Y —— 运算结束后,C寄存器存放乘积的低位部分。

image-20190309235030072

2)补码1位乘法(booth 法)

补码乘法规律:
[ x ⋅ y ] 补 = [ x ] 补 ⋅ ( − y 0 + 0. y 1 y 2... y n ) [x · y]补 = [x]补·(-y0 + 0. y1 y2... yn ) [xy]=[x](y0+0.y1y2...yn)

根据该规律,有两种计算方法:
1.修正法「由 y 的正负决定」
「被乘数连同符号位参加运算,乘数仅数值部分参加运算!」
得到最后的乘积之后,需要对结果进行修正。
修正规则如下: 
如果乘数大于零,即y0=0,则不需要修正。 
如果乘数小于零,即y0=1,则需要对结果进行修正:
[x•y]补 = [x]补 × 0.y1 y2...yn + [-x]补 × y0

2.booth法(在修正法基础上得来)
 1)小数点移动位数:数值位数(不含附加位)。
 2)附加位:跟符号位相同!
 3)被除数添加附加位后表示。
 规则如下:
  除数末位补0,
  yi+1 - yi = 0 ,部分乘积直接右移
  yi+1 - yi = 1 ,部分乘积 + [x]补,右移
  yi+1 - yi = -1 ,部分乘积 - [x]补 = 部分乘积 + [-x]补,右移

ps
修正法符号位不参加运算。
booth法符号位参加运算。

pps
booth法中,在计算过程中的符号位进位溢出舍掉!!!
e.g x=0.10101, y= -0.10101

修正法示例:

image-20190310002304198

booth法示例:

image-20190310165013181

2.两位乘法「每次处理两位」—— 被乘数三符号位

1)原码两位乘法

两位乘数有四种可能组合:

00 —— 部分积右移2位

01 —— 部分积 + X,右移两位

10 —— 部分积 + 2X,右移两位

11 —— 部分积 + 3X,右移两位 (本次 -X ,然后触发器送1,下次 +X )

# 被乘数和部分积:三位符号位表示!!!
# 乘数符号位不参加运算,但是参加表示:即在数值位前添0 !!!
# 乘数符号位:(核心:凑偶数)
  1.数值位为奇数,则单符号位
  2.数值位为偶数,则双符号位
  e.g  x=0.11011, y= -0.10111  ——  |x| · |y|   

步骤:1.将 x 三位符号位表示 ;

​ 2.在除数y 数值位前补0,数值位奇1个0,偶两个0 ;

​ 3.计算 |x| · |y| 。

2)补码两位乘法

补码两位乘法通过判断 Yi-1,Yi, Yi+1 三位不同组合值
「Yi+1 + Yi - 2Y-1 」来判断运算情况:
Yi-1 Yi Yi+1
000 —— 部分积 + 0,右移两位
001 —— 部分积 + x,右移两位
010 —— 部分积 + x,右移两位
011 —— 部分积 + 2x,右移两位
100 —— 部分积 - 2X,右移两位
101 —— 部分积 - x,右移两位
110 —— 部分积 - x,右移两位
111 —— 部分积 + 0,右移两位

# 被乘数和部分积取 三符号位 !
# 移动次数:
  1.乘数数值位奇数:移动 (1+n)/2 次,且最后一次只移一位。
  2.乘数数值位偶数:在乘数末位补0,然后按奇数处理。

步骤:1.求 [x]补 、 [ -x]补,[y]补 ——其中[x]补 三位符号位表示 ;

​ 2.[y]补 数值位若为偶数,则末位补0 ;

​ 3.注意寄存器C是附加位:Yi+1 ;

​ 3.根据 (Yi+1 + Yi - 2Y-1)的值开始计算 ——「符号位溢出舍去」。

image-20190311182612467

五、除法运算「一般不能精确除,所以精确到除数数值位数」

1.定点原码一位除法 —— 除数、被除数都双符号位

1)恢复余数法

跟人工类似 —— 繁琐

2)加减交替法

规则:

余数为正时,商 + 1,余数和商左移一位,继续减除数。

余数为负时,商 + 0,余数和商左移一位,加上除数。

若最后一次商 + 0,求正确余数时需要加上除数。

2.定点补码一位除法(加减交替法)

「记规则 」

六、浮点数的运算

1.浮点数加减法

四步骤:浮点表示 -> 对阶(小变大) -> 尾数双符号运算 -> 规格化结果

2.浮点数乘除法

乘法 :两个浮点数尾数相乘,阶码相加

除法:两个浮点数尾数相除,阶码相减

最后都要规格化处理 & 溢出判断处理

七、十进制整数的运算(BCD码 与 8421码)

BCD码:在计算机中十进制用BCD码表示,BCD码由4位二进制数表示,按照二进制数的加法规律来进行加法运算。

十进制数的进位是10,而4位二进制数的进位是16,为此需要必要的十进制校正,才能使进位正确。不同的BCD码对应的十进制校正规律是不一样的,因此硬件实现也是不同的。

BCD码有多种。下面介绍8421码。

8421码:一位8421码4位二进制数 表示 ,直接加法运算后产生进位的值是16,而 不是8421码的10。因此,必须+6校正,才能使该进位正确。

(e.g 5(BCD) = (0101)2 )

8421码的 加法规则如下:

(1)两个8421码相加时,“逢二进一”;

(2)如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要 修正;

(3)如相加之和大于或等于(1010)2,或者产生进位,要进行加6修正;

(4)在做+6校正的同时,将产生向上一位的进位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值