小数点的处理:
任意一个二进制数S都可以表示为
研究小数点就要研究阶码E的取值:
若E=0,则表示纯小数——代表定点小数;
例0.1111表示+0.1111,1.1111表示-0.1111。若E=n,则表示纯正数——代表定点正数;
例01111表示+1111,11111表示-1111。E=m,且0<m<n,小数点在中间n个数内浮动——代表浮点数。
定点数的运算:
1、运算中,采用补码来表示定点数。
2、定点数的移位运算
当某二进制数相当于小数点做n位左移或者右移,相当于该数乘以或者除以2^n。
由于机器数的字长都是固定的,当机器数左移或者右移时,都会造成n位低位或者n位高位出现空缺。
逻辑移位(无符号数)
算术移位
当机器数为正例:设机器字长为8,A=+26
A=+26=+11010
[A]原=[A]补=[A]反=0,0011010
当机器数为正,三码相等,左移右移都补0 。
当机器数为负
例:设机器字长为8,A=-26
[A]原=1,0011010
[A]补=1,1100110
[A]反=1,1100101
原码——左移右移补0。
补码——左移补0,右移添1。
反码——左移右移都添1。
定点数的加/减运算
1、原码
加法规则:先判断符号位,若相同,绝对值相加,结果符号位不变;若不同,则做减法,绝对值大的数减去绝对值小的数,结果与绝对值大的数相同。(同号求和,异号求差)减法规则:两个原码表示的数相减,首先将减数的符号取反,然后将被减数与符号取反后的减数按原码加法进行运算。(同号求差,异号求和)例:[x]原=0.1101,[y]原=1.1001,求[x+y]原、[x-y]原?
[x+y]原:
符号位不同,做减法:
[-y]原=0.0111
最高数值位产生进位,所在数值位.0100,再加上第一操作数的符号0
[x-y]原:
减数的符号取反,
因为数值最高位产生进位,结果正上溢。
2、补码
补码加法两个数的补码相加,符号位参加运算,且两数和的补码等于两数的补码之和。
补码减法例:x=+0.1011,y=-0.1001,求[x+y]补?
[x]补=0.1011 [y]补=1.0111
则:[x+y]补=0.1011+1.0111=0.0010(符号位进位舍去)
即:[x+y]补=0.0010,真值为:+0.0010。
由于运算器仅有加法器,则:
例:已知[x]补=0.0010,[y]补=1.1010,求[x-y]补?
[y]补=1.1010,则[-y]补=0.0110
则[x-y]补=0.0010+0.0110=0.1000。
3、特殊的情况——溢出(补码)
溢出产生的原因:当两(小)数相加大于(1或)上界127,称为上溢或者正溢出,两(小)数相加小于(-1或)下界-128,称为下溢或负溢出。发生溢出,数值位扩充,数值位“跑“到符号位,然后取代符号位。导致”两正数相加等于负数,两负数相加等于正数“。计算机判断溢出的方法①单符号——两符号相同的运算,运算结果符号相反的为溢出。
②双符号法(变形补码法)——检测正负溢出
特点:
两位符号位要联同数值部分一起参加运算。高位符号位产生的进位直接丢弃。
原则:
当两位符号位不同时,表示溢出。高位符号位永远代表真正的符号位。
正溢出
例:已知[x]补=00.1011,[y]补=00.0111,求[x+y]补=?
负溢出:
例:已知[x]补=11.0101,[y]补=11.1001,求[x+y]补=?
③当两个单符号:
当两个单符号位补码进行加减运算时,若最高数值号位向符号位的进位值C与符号位产生的进位输出值S相同,则没有溢出发生;如果两个进位值不同,则发生溢出。
判断公式:C⊕S
例:已知[x]补=1.0101,[y]补=1.1001,求[x+y]补=?
例:已知[x]补=1.1000,[y]补=1.1000,求[x+y]补=?
《计算机组成原理》——唐朔飞