计算机的运算方法
1丶 无符号数和有符号数
2.丶数的定点表示和浮点表示
3.丶定点运算
1、移位运算
2、加减法运算
3、乘法运算
4、除法运算
4丶浮点的四则运算
一丶无符号数和有符号数
数包括有符号数和无符号数。
-*****************-- eg: 机器字长为16为进制的范围。
- 无符号数:0-65535。【0~(2^16)-1】
- 有符号数:-32768~32767。【符号位占一位】+【-(2^15)~[(2^15)-1]】
符号位:
- ”0”代表正;
- “1”代表负;
二丶数的定点表示和浮点表示
定点数:包含【数符;整数部分】和【数符;小数部分】。
表示的定点数不是【纯整数】就是【纯小数】。
浮点数:灵活的表示小数点的位置。
表示所有实数
1、数的定点表示。
①、若机器数采用原码
|- 小数在定点机中数的表示范围是【-(1-2^n)~(1-2^n)】。
|- 整数在定点机中数的表示范围是【-(2^n-1)~(2^n-1)】。
②、表示的数如果不是纯小数和纯整数,则必须乘上一个比例因子,否则会“溢出”。
③、三种机器数原码、补码、反码的特点归纳:
a、最高位均为符号位,符号位与数值部分用,或者.隔开。
b、当真值为正时,原码、补码、反码相同。
c、当真值为负时,符号位都用"1"表示,数值部分关系是:
补码=原码“取反加一”。
反码=原码“每位取反”。
d、负补码=补码“连同符号位在内的每位取反加一”
2、数的浮点表示。
N=S*(r^j) 。
|- S:表示尾数(可正可负)。
|- j:为阶码(可正可负)。
|- r:是基数(可取2、4、8、16、etc…)
小数点右移阶码为负;
小数点左移阶码为正;
小数点左移动两位阶码为10,右移两位为-10。
小数点左移动三位阶码为11,右移两位为-11。
①、浮点数的表现形式:
|--阶符--|--阶码数值部分--|--数符--|--尾数的数值部分--|
阶码,/.阶码数值部分;数符,/.尾数的数值部分。
②、阶码的表示范围:
没有规格化-2^(2^m-1)*(1-2^(-n))~-2^[-(2^m-1)]*(1-2^(-n))
上边表示的是负数区,正数区就是负数区的绝对值。
中间的是"下溢",两边的是"上溢"。
规格化-2^(2^m-1)*(1-2^(-n))~-2^[-(2^m-1)]*(2^(-1))
-同没有规格化的一样
三丶定点运算
1、乘法运算(部分积+乘数)
①、乘法运算可用【移位】和【加法】来实现。
n位数相乘,共需n次加法和n次移位
乘法的一位都是向右移位。
②、由乘数的末位值确定的被乘数是否与原部分积相加,然后移一位,形成新的部分积,同时,乘数也右移一位,由此低位作为新的末位,空出最高位放部分积的最低位。
※ 原码一位乘
1、乘积的符号位由两原码的符号位【异或】运算结果决定。
【符号位的运算】与【数值部分】分开计算。
2、乘积的数值部分由两数的【绝对值】相乘。
3、乘数为1,加上【原码的绝对值】;乘数为0 ,加上0。
4、最初的部分积 Z=0。
5、最后一步是需要移位的。
※ 原码两位乘
两位乘的后两位与标志为的状态决定,其余和一位乘相同
※ 补码一位乘
简单算法:
直接取补码进行计算,不需要用到绝对值。
- 乘数大于 0 :
只是在相加移位的时候按补码规则进行,其余和原码一位乘相同。
- 乘数小于 0 :
先不考虑符号位,最后的一步要加上 [-x]补码。
Booth算法:
需要考虑一个附加位[y(n+1)]
这个附加位的来源是乘数的右移的丢弃的项。
※ 补码两位乘
取三位符号位。
由后三位取判断如何操作。
2、除法运算(上商)
1、原码除法
|- 向左移位
|- 被除数(余数)、商为0;第一步加上除数的负补码。
|- 上商 n+1 次。
①、恢复余数法
|-余数为负数,上商为"0",恢复余数【除数的绝对值的补码】
|-被恢复的被除数左移1位,加上【除数的绝对值的负补码】
|- 余数为正数,上商为”1”,左移1位,加上【除数的绝对值的负补码】`
②、加减交错法
|-余数为负数,上商为"0",左移1位,加上【除数的绝对值的补码】
|-余数为正数,上商为"1",左移1位,加上【除数的绝对值的负补码】
2、补码除法
四丶浮点的四则运算
参考百度文库吧,总结的比我好多了!!!