1.知[x]补求[-x]补
- [x]补连同符号位在内,每位取反,末位加一。
2.算术移位规则
- 实质为该数乘或除以2^n。
- 有符号数的移位为算术移位,无符号数的以为称为逻辑移位。
- 为避免算术左移最高位丢1,可采用带进位(Cy)的 移位。即将符号位移至Cy。
3.补码运算规则
整数先求各数的补码相加后,对于整数而言对2^(n+1)取模,小数对2取模。目的将进位产生的1丢掉。
溢出判断:
补码定点加减运算判断溢出有两种方法:
单符号位法和双符号位法。
单符号位法:
- 对于加法溢出情况为相同符号位的数相加才可能出现溢出。
- 对于减法相同符号位相减不可能出现溢出。
- 结论:
不论加减法只要参加运算的数符号位相同,结果的符号与其不同,则溢出。
为节省时间判断是否溢出的方法:
将符号位产生的进位C(f)与最高有效位产生的进位异或操作后进行判断。(异或,相同为0,不同为1) - 当结果为1时溢出,为0无溢出。
- 其中细分为正溢出,和负溢出。
- 符号位的进位为1时为正溢出,否则为负溢出。
双符号位法:
- 了解此法前,先了解一下,小数补码的定义:
整数时:
[x]补=2^(n+2)+x(x为负)
小数时:
[x]补=x(x为正)
[x]补=2+x(x为负,mod2)
同理:当模数为4时,形成了双符合位的补码。
[x]补=2^2+x(x为负,mod4),其引入在判断溢出时有特殊作用。
补充:从补码定义可以发现,当x为负数时,补码运算还是要进行减法运算,这与补码初心只要加法有点违背,后面发现一种负数补码的运算规则,也可求补码(即除符号位不变,每位求反,末位加1)反码就因此而生。
运算规则:
2位符号位连同数值部分一起参与运算。
判断溢出的规则:
当2位符号位不同时,表示溢出,否则无溢出。第一个符号位永远代表真正的符号。第一位为0(即正)则上溢(正溢出),为1(即负数)则为下溢(负溢出)。
以上结论对于整数而言同样适用。
乘法运算
- 计算机中乘法运算很重要,现在有的机器由硬件直接完成乘法运算,有的机器按照乘法运算的方法依靠软件编程实现。可见掌握它有助于乘法器的设计,和乘法编程。
我们都会笔算乘法,例如:
分析其在计算机中实现的缺点:其一,将4个位积一次相加,机器难以实现;其二,乘积位数增加了一倍,这将导致器材的浪费和运算时间的增加。正因如此,我们将笔算乘法进行改进。
笔算乘法的改进
将其转化为移位后(即将乘法转换成移位和加法运算):从里向外开始分步运算:
*原码一位乘规则:
成绩的符号位由两原码符号位异或运算结果决定。
成绩的数值部分由两数绝对值相乘,其通式为:
- 部分积右移法
- y=1,部分积+被乘数x,右移一位。
- y=0,直接右移一位。
优点:可以利用现行加法器,电路设计简单。
缺点:加法运算为串行进行的,每一步都要占用若干时钟周期,效率较低。- 大规模集成电路的发展给乘法器的设计带来了曙光——阵列乘法器,其思想为资源换效率。
- 原码阵列乘法器:其规则就是原码一位乘。
除法运算
笔算除法在计算机上的缺点:机器不能“心算”上商,必须通过比较被除数和除数绝对值的大小来确定商值。
改进后:恢复余数法
特点:当余数为负时,需要加上除数,将其恢复原来的余数。
缺点:每当余数为负数时,都需要恢复余数,这就延长了机器除法的时间,操作也很不规则,对线路不利。加减交替法克服了这个缺点。
加减交替法:
特点:当运算过程中出现不够减,就不恢复余数,根据余数的符号继续往下运算,因此步数固定,控制简单。
运算规则:当余数为正时,商“为1”,余数左移一位,减除数;
当余数为负时,商为“0”,余数左移一位,加除数。