1.原码的除法运算(符号位单独计算)
恢复余数法
商0情况
先默认商1,如果不够减,就恢复余数商0.
商1情况
手动模拟
左移n次,上商次数为
n
+
1
n+1
n+1次。
不恢复余数法(加减交替法)
当余数为正时,商1,余数左移一位,减去除数(+
[
−
∣
y
∣
]
补
[-|y|]_{补}
[−∣y∣]补)。
当余数为负时,商0,余数左移一位,加上除数(+
[
∣
y
∣
]
补
[|y|]_{补}
[∣y∣]补)。
左移n次,上商次数为
n
+
1
n+1
n+1次,所以加减要
n
+
1
n+1
n+1次。
若最后一次的余数为负数,则要商0,并+
[
∣
y
∣
]
补
[|y|]_{补}
[∣y∣]补得到正确余数,故加减次数可能为
n
+
2
n+2
n+2次。(不恢复余数法的最后一步可能要恢复余数。)
2.补码的除法运算(符号位参与运算双符号位)
刚开始被除数和除数同号,则被除数要减去除数(+
[
−
y
]
补
[-y]_{补}
[−y]补);被除数和除数异号,则被除数要加上除数(+
[
y
]
补
[y]_{补}
[y]补)。
之后如果余数和除数同号,商1,余数左移,减去除数(+
[
−
y
]
补
[-y]_{补}
[−y]补);
如果余数和除数异号,商0,余数左移,加上除数(+
[
y
]
补
[y]_{补}
[y]补)。
最后末位商恒置为1,不用看余数和除数的关系,一共进行
n
+
1
n+1
n+1次加减。
原码不恢复余数与补码不恢复余数比较
3.数据类型强制转换
short 16bit,2字节
int、float 32bit,4字节
long、double 64bit,8字节
一般转换规律:char→int→unsigned→long->float->double
4.浮点数的表示和运算
浮点数尾数的规格化
规格化浮点数的特点
IEEE 754
阶码在IEEE 754标准中用移码表示。(移码只能表示整数)。
阶码真值=移码-偏移量
移码=阶码真值+偏移量
float有8位阶码:偏置值=
2
8
−
1
−
1
=
127
2^{8-1}-1=127
28−1−1=127(移码:01111111B)
double有11位阶码:偏置值=
2
11
−
1
−
1
=
1023
2^{11-1}-1=1023
211−1−1=1023(移码:01111111111B)
尾数为原码表示,要通过移位让最高位为1,隐藏最高位,只写后面的M。
十进制数与单精度浮点数之间的转换
单精度、双精度所能表示的数据范围:
阶码全0,全1有特殊的用途
阶码全0,尾数M不全0,表示非规格小数,最高位隐含为0,阶码真值固定为-126。
浮点数的加减运算
只有阶码溢出时会发生溢出,尾数溢出时未必导致整体溢出,可以通过规格化和舍入来拯救。
规格化具体操作
无舍入情况下的浮点数加减法
有舍入情况下的浮点数加减法
两种常用方法:'0’舍’1’入法,恒置’1’法
int->float 可能会损失精度
float->int 可能会损失精度,也可能会溢出
小结
5.ALU算术逻辑单元
最基本的逻辑运算:与或非
复合逻辑:与非、或非、异或、同或
一位全加器