★ ★ 机器数:机器数:在机器中使用的连同数符一起在机器中使用的连同数符一起 代码化的数代码化的数3.2 3.2 带符号二进制数带符号二进制数的表示方法及加减法运算的表示方法及加减法运算一、带符号二进制数的表示一、带符号二进制数的表示★ ★ 真值真值(X)(X)::一个数本身一个数本身( (它所代表的实际值它所代表的实际值) )★ ★ 机器数有三种表示方式:机器数有三种表示方式:原码原码、、补码补码和和反码反码★ ★ 为讨论方便,先假设机器数为小数,为讨论方便,先假设机器数为小数, 格式:符号位格式:符号位 小数点小数点 数值数值1★ ★ 最高位为符号位,最高位为符号位,0 0表示正数,表示正数,1 1表示负数表示负数★★ 数值部分用绝对值形式表示数值部分用绝对值形式表示1. 原码表示法原码表示法真值真值X[X]原原+0.10110.1011-0.10111.10110++0--02★ ★ 最高位为符号位,最高位为符号位,0 0表示正数,表示正数,1 1表示负数表示负数★ ★ 若真值为正数:数值部分与原码相同;若真值为正数:数值部分与原码相同; 若真值为负数:数值部分为原码各位取反,若真值为负数:数值部分为原码各位取反, 并且末位再+并且末位再+1 1。
2. 补码表示法补码表示法真值真值X[X]补补+0.10110.1011-0.10111.01010++0--03★ ★ 最高位为符号位,最高位为符号位,0 0表示正数,表示正数,1 1表示负数;表示负数;★★ 若真值为正数:数值部分与原码相同;若真值为正数:数值部分与原码相同; 若真值为负数:数值部分为原码各位取反若真值为负数:数值部分为原码各位取反 3. 反码表示法反码表示法真值真值X[X]反反+0.10110.1011-0.10111.01000++0--040.1111 0.1010 ★ ★ 举例举例真值真值X机器数机器数[X]原原[X]反反[X]补补+0.1010-0.1010+0.1111-0.010053. 不同码制间的相互转换不同码制间的相互转换[X]原原[X]补补0.101001.101111.01010.11101.010101.10111[X]原原[X]反反0.101001.101111.01010.11101.010101.10111601010 01010 01010 11010 10101 10110 4. 整数的表示形式整数的表示形式X=Xn … X2 X1 X0Xn--符号位--符号位★ ★ 举例举例真值真值X机器数机器数[X]原原[X]反反[X]补补+1010-10107溢出:溢出:运算结果超出机器数所能表示的范围。
运算结果超出机器数所能表示的范围★★ 两个异号数相加或两个同号数相减,不会溢出两个异号数相加或两个同号数相减,不会溢出★★ 两个同号数相加或两个异号数相减,有可能溢出两个同号数相加或两个异号数相减,有可能溢出1. 溢出判断的三种方法溢出判断的三种方法二、补码加减法运算二、补码加减法运算8★ ★ 设:设:fA:操作数:操作数A的符号位的符号位 fB:操作数:操作数B的符号位的符号位 fS:结果:结果S的符号位的符号位 Cf:: fA、、fB参与运算所产生的进位参与运算所产生的进位③③ 9+3=12 0 1 0 0 1 + 0 0 0 1 1 0 1 1 0 0②② -11-7= -18 1 0 1 0 1 + 1 1 0 0 1 1 0 1 1 1 0①① 11+7=18 0 1 0 1 1 + 0 0 1 1 1 1 0 0 1 0正溢(上溢)正溢(上溢) 负溢(下溢)负溢(下溢) 无溢出无溢出 无溢出无溢出④④ -9-3= -12 1 0 1 1 1 + 1 1 1 0 1 1 1 0 1 0 09★ ★ 方法一方法一● 正+正正+正 负负 ● 负+负负+负 正正10★ ★ 方法二方法二● C与与Cf不相同不相同,则溢出。
则溢出11★ ★ 方法三(方法三(常用常用))● 采用双符号位采用双符号位fS1fS2正数为00,负数为,负数为11● 当结果的两个符号位当结果的两个符号位fS1和和fS2不相同时,为溢出不相同时,为溢出12★★ 运算结果的双符号位可能是:运算结果的双符号位可能是: 00 00:结果为正,无溢出:结果为正,无溢出 01 01:正溢(大于机器所能表示的最大正数):正溢(大于机器所能表示的最大正数) 10 10:负溢(小于机器所能表示的最小负数):负溢(小于机器所能表示的最小负数) 11 11:结果为负,无溢出:结果为负,无溢出★★ ““变形补码变形补码”(”(双符号位是模双符号位是模4 4补码补码) ) ~采用多符号位的补码~采用多符号位的补码13 ★ ★ 参与运算的数是补码,其结果仍是补码参与运算的数是补码,其结果仍是补码 符号位与数值位一样参与运算符号位与数值位一样参与运算 ★★ [[X+Y]]补补=[[X]]补补+[[Y]]补补 ★★ [[X-Y]]补补 = [[X+ (-Y)]]补补= [[X]]补补+[[-Y]]补补 ★★ 已知已知[[Y]]补补求求[[-Y]]补补的方法:的方法: 将将[[Y]]补补连同符号位一起取反,末位再加连同符号位一起取反,末位再加1 1。
2. 补码运算基础补码运算基础14★★例例1 1::★★例例2 2::★★例例3 3::★★例例4 4::3. 补码加法运算(补码加法运算(X+Y=?))[X+Y]补补=00.11111 无溢出无溢出[X+Y]补补=100.0001 无溢出无溢出[X+Y]补补=111.0001 无溢出无溢出[X+Y]补补=01.0110 正溢正溢15★ ★ 例例1 1::4. 补码减法运算补码减法运算((X-Y=?))解:解:[X]补补=00.1100 [Y]补补 [-Y]补补 1∴∴ [X-Y]补补 X-Y= +0.0101 (无溢出无溢出)16★★ 例例2::解:解:[X]补补=11.0100 [Y]补补 [-Y]补补 ∴∴ [X-Y]补补 X-Y= -0.0110 (无溢出无溢出)17按照机器数的小数点位置是否固定,把数分为:按照机器数的小数点位置是否固定,把数分为:★★ 定点数定点数★★ 浮点数浮点数三、定点数和浮点数三、定点数和浮点数18所有数据的小数点位置固定不变。
所有数据的小数点位置固定不变★★ 定点小数定点小数 X0.X1X2…Xn 符号位符号位 数值部分数值部分( (尾数尾数) ) ★★ 定点整数定点整数 X0X1X2…Xn.1. 定点数定点数19小数点位置可浮动的数据小数点位置可浮动的数据★★ 浮点数通常表示为:浮点数通常表示为:N=M·RE N:浮点数,:浮点数,M:尾数,:尾数,E:阶码,:阶码, R:阶的基数:阶的基数(底底),常数,常数(一般为一般为2、、8或或16)2. 浮点数浮点数(1)(1)20★ ★ 一台计算机中所有数据的一台计算机中所有数据的R都相同,不需都相同,不需 表示出来因此,浮点数的机内表示一般表示出来因此,浮点数的机内表示一般 采用以下形式:采用以下形式: MSEMMS::1位,是尾数的符号位,在最高位上位,是尾数的符号位,在最高位上E::阶码,一般为整数,阶码,一般为整数, n+1位(位(1位阶符、位阶符、n位阶值)位阶值)M::尾数,尾数,m位(由位(由MS和和M组成一个定点小数)。
组成一个定点小数)21★★ 例如例如(设机器字长(设机器字长16位、用原码表示)位、用原码表示)1010010011100000::0101111010000000::尾符尾符 阶符阶符 尾数值尾数值 阶值阶值22★★ 整个浮点数的正负由什么决定?整个浮点数的正负由什么决定?★★ 阶码部分位数越多,数的范围越大阶码部分位数越多,数的范围越大or小?小?★★ 浮点数运算前要先对齐小数点,如何判断?浮点数运算前要先对齐小数点,如何判断?--尾符--尾符--大--大--判断两个数的阶码是否相等--判断两个数的阶码是否相等23★★ 常用的浮点数有两种格式:常用的浮点数有两种格式:● 单精度浮点数单精度浮点数(32(32位位) ),阶码,阶码8 8位,位, 尾数尾数2424位位( (内含内含1 1位符号位位符号位) )● 双精度浮点数双精度浮点数(64(64位位) ),阶码,阶码1111位,位, 尾数尾数5353位位( (内含内含1 1位符号位位符号位) )24规格化:规格化:为了提高运算精度,要使尾数的有效为了提高运算精度,要使尾数的有效 数字尽可能占满已有的位数。
数字尽可能占满已有的位数2) (2) 浮点数的规格化浮点数的规格化● 0 ≤M<<1/2 ● 1/2≤M<<1● 1 ≤M<<2—— 未规格化未规格化—— 已规格化已规格化—— 溢出溢出★★ 浮点数经过运算后,其尾数浮点数经过运算后,其尾数(M)(M)的数值范围的数值范围 有有3 3种可能(二进制):种可能(二进制): 25★★ 判断任何进制的浮点数规格化的重要标志:判断任何进制的浮点数规格化的重要标志: 尾数最高位上的数字不是尾数最高位上的数字不是0 0(负数的补码、反码反之)(负数的补码、反码反之)26★ ★ 浮点非规格化数的处理浮点非规格化数的处理 将尾数左移或右移,并修改阶码值使之满足将尾数左移或右移,并修改阶码值使之满足规格化要求规格化要求例如:例如:假设浮点数的尾数为,假设浮点数的尾数为, 阶码为阶码为0100(设定设定R=2),如何规格化?,如何规格化?答:答:将尾数左移将尾数左移2位,而成为,位,而成为, 阶码减去阶码减去(10)2,修改成,修改成0010,, 此时,浮点数的值保持不变。
此时,浮点数的值保持不变27例如:例如:设设X=(35/512)10,将它表示为二进制,将它表示为二进制定点数定点数(16位位)和浮点规格化数和浮点规格化数(阶阶4位尾位尾12位位)答:答: X=( 35/512)10= (0.000100011)2 X的定点表示为:的定点表示为: X的浮点规格化表示为:的浮点规格化表示为: 101128★★ 机器零机器零 计算机都把该浮点数看成零值,称为计算机都把该浮点数看成零值,称为机器零机器零● 一个浮点数的尾数为一个浮点数的尾数为0 0时时( (不论阶码是何值不论阶码是何值) );;● 或或阶码的值比机器能表示的最小值还小时阶码的值比机器能表示的最小值还小时29尾数用补码表示,阶码用补码或移码表示尾数用补码表示,阶码用补码或移码表示 (3) (3) 浮点数的表示浮点数的表示● 最高位为符号位,最高位为符号位,1 1表示正数,表示正数,0 0表示负数表示负数● 若真值为正数:数值部分与若真值为正数:数值部分与原码原码相同;相同; 若真值为负数:数值部分与若真值为负数:数值部分与补码补码相同。
相同★★ 移码移码 (只表示整数)(只表示整数)30真值真值X[X]移移+01101-01101-11010++0--010110101001100011100001000031★★ 移码移码与补码的关系与补码的关系真值真值X[X]补补[X]移移+1011-101101011110111010100101把[把[X]]补补的符号位取反,即得[的符号位取反,即得[X]]移移32★★ 数值范围:数值范围:机器所能表示的一个数的机器所能表示的一个数的 最大值和最小值之间的范围最大值和最小值之间的范围★★ 数据精度:数据精度:一个数的有效位数一个数的有效位数4) (4) 计算机中数据的表示范围与精度计算机中数据的表示范围与精度33★★ 例如例如 ● 3232位定点数位定点数( (补码补码) ) 定点小数的数值范围:定点小数的数值范围: ,, 定点整数的数值范围:定点整数的数值范围: ,, 数据精度为数据精度为 位。
位 ● 3232位单精度浮点数位单精度浮点数( (阶码阶码8 8位、尾数位、尾数2424位位) ) 数值范围:数值范围: ,, 精度为精度为 位1-1~~1-21-2-31-31-2-23131~~2 23131-1-13131-2-2127127~~(1-2(1-2-23-23) )·2 21271272424和定点数相比,浮点数牺牲了精度、扩大了范围和定点数相比,浮点数牺牲了精度、扩大了范围。