定点数的表示与运算
定点数的表示
无符号数与有符号数
1)无符号数
指整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值.若机器字长为8位,则数的表示范围为0——2^8-1,即:0-255
注:通常只有无符号整数,而没有无符号小数.
2)有符号数
机器数的定点表示
定点小数
定点小数是纯小数,约定小数点位置在符号位之后,有效数值部分最高位之前.若数据X的形式为X=x0x1x2x3....xn(其中x0为符号位,x1-xn是数值的有效部分,也称尾数,为最高有效位),则在计算机中的表示形式如图:(机器字长为n+1位)
当x0=0,x1-xn均为1时,X为其所能表示的最大正数,真值为1-2^-n;
当x0=1,x1-xn均为1时,X为其(原码)所能表示的最小负数,真值等于-(1-2^-n);
定点整数
定点整数是纯整数,约定小数点位置在有效数值部分最低位之后.若数据X的形式为X=x0x1x2....xn(其中x0为符号位,x1-xn是尾数,xn为最低有效位),则在计算机中的表示形式如图2.5所示(设机器字长n+1位).
当x0=0,x1-xn均为1时,X为其所能表示的最大正数,真值为2^n-1
当x0=1,x1-xn均为1时,X为其(原码)所能表示的最小负数,真值等于-(2^n-1);
原码,反码,补码,移码
原码
用机器数的最高位表示该数的符号,其余的各位表示数的绝对值.原码的定义如下:
注意:真值零的原码表示有正零和负零两种形式,即[+0]原=00000和[-0]=10000。
反码
反码通常用来作为由原码求补码或由补码求原码的中间过渡。
若符号位为0,则反码与原码相同.
若符号位为1, 则数值位全部取反.
补码
正数的补码=原码
负数的补码=反码末位+1(要考虑进位)
移码
补码的基础上将符号位取反。注意:移码只能用于表示整数
注:移码全0时,对应真值的最小值-2^n;移码全1时,对应真值的最大值为2^n-1;
移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小;
知识回顾
定点数的运算
移位运算
原码的算术移位
原码的算术移位——符号位保持不变,仅对数值位进行移位.
右移:高位补0,低位舍弃.若舍弃的位=0,则相当于/2:若舍弃的位不等于0,则会丢失精度
左移:低位补0,高位舍弃,若舍弃的位=0,则相当于/2,若舍弃的位不等于0,则会出现严重误差
反码的算术移位
反码的算术移位——正数的反码和原码相同,因此对正数反码的移位运算也和原码相同。
右移:高位补0,低位舍弃.
左移:低位补0,高位舍弃
反码的算术移位——负数的反码数值位与原码相反,因此负数反码的移位运算规则如下,
右移:高位补1,低位舍弃
左移:低位补1,高位舍弃
补码的算术移位
补码的算数移位——正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。
右移:高位补0,低位舍弃
左移:低位补0,高位舍弃
补码的算数移位——负数补码=反码末位+1
导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止.
规律——负数补码中,最右边的1及其右边同原码.最右边的1的左边同反码.
负数补码的算数移位规则如下:
右移(同反码):高位补1,低位舍弃
左移(同原码):低位补0,高位舍弃
逻辑移位
逻辑移位将操作数视为无符号数,移位规则:逻辑左移时,高位移丢,低位添0;逻辑右移时,低位移丢,高位添0
注意:逻辑移位不管是左移还是右移,都添0
循环移位
循环移位分为带进位标志位CF的循环移位(大循环)和不带进位标志位的循环移位(小循环),过程如图2.7所示
循环移位的主要特点是,移出的数位又被移入数据中,而是否带进位则要看是否将进位标志位加入循环位移。例如.带进位位的循环左移就是数据位连同进位标志位一起左移,数据的最高位移入进位标志位CF,而进位位则依次移入数据的最低位
章节回顾
加减运算
原码加减运算
这样用减法器和加法器可以求出结果,加法器设计起来简单,不过减法器设计起来就很复杂了而且成本也高。那么我们能不能想一个方法,只用加法器来完成这个过程?
加法代替减法
我们举个例子,假如现在10点,我们如何将其调到7点?第一种方法就是逆时针调三格,10-3就可以了,第二种方法就是顺时针调九个,(10+9)%12,这就相当于求余数了
模运算性质:
带余除法——设x,m属于Z,m>0则存在唯一决定的整数q和r,使得:
x=qm+r 0<=r<m
说明-3,9,21,33,-15这些数都是等价的
想用加法代替减法。就可以用9代替-3,这两者又是互补的
所以:模-a的绝对值=a的补数(12-3=9)
在机器字长为8bit位上,可以看成是模2^8,数都映射到0-2^8-1上.:
计算机只有八个比特字长,硬件会天然的帮我们模2^8,最高位1会被处理掉,结果就是0了
补码——让减法操作转变为加法操作,节省硬件成本.
这里其实就是求该数的补码(模-a的绝对值=a的补数)
补码加减运算
溢出判断
计算机如何进行溢出判断?
符号扩展
在一定程度上避免溢出
章节回顾