数据的表示和计算
文章目录
一、定点整数
设位数为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
补码表示范围: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]补//mod2n∗2
可分四种情况来证明:
######(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]补//mod2n∗2
(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+2n∗2+y=2n∗2+(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+2n∗2+2n∗2+y=2n∗2+(2n∗2+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
符号位要作为数的一部分参加运算。
在模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 [x−y]补=[x]补−[y]补=[x]补+[−y]补//mod2n∗2
现只需证明:
[
−
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寄存器存放乘积的低位部分。
2)补码1位乘法(booth 法)
补码乘法规律:
[
x
⋅
y
]
补
=
[
x
]
补
⋅
(
−
y
0
+
0.
y
1
y
2...
y
n
)
[x · y]补 = [x]补·(-y0 + 0. y1 y2... yn )
[x⋅y]补=[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
修正法示例:
booth法示例:
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)的值开始计算 ——「符号位溢出舍去」。
五、除法运算「一般不能精确除,所以精确到除数数值位数」
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校正的同时,将产生向上一位的进位。