6.1无符号数和有符号数
6.1.1无符号数
寄存器位数反映无符号数的表示范围
6.1.2有符号数
1.机器数与真值
真值:带符号的数
机器数:符号数字化的数
2.原码表示法
①整数
[x]原是n+1位
用逗号将符号位和数值部分分隔开
②小数
用小数点将符号位和数值位分隔开
3.补码表示法
①整数
用补码表示原码的目的是为了寻找负数的等价正数,从而将减法运算转换为加法运算,并且解决了0的原码有2个的问题
②小数
有时候必须用定义求补码,比如说:
1)小数-1.000的补码是1.000(-1.000+2=1.000)
2)求-8的4位补码:[-8]补=[-1000]补=2的4次方+(-1000)=1,000
针对负数:
原码->补码:除符号位外,各位取反再加一
补码->原码:除符号位外,各位取反再加一
③双符号位补码
用于阶码运算和溢出判断
④由[y]补求[-y]补
1)整数
除了y=-2的n次方外(需要单独处理,[-y]补的n+1位补码不存在),[-y]的补码为连同符号位在内,每位取反,末位加1
2)小数
除了y=-1.0000,[-y]的补码为连同符号位在内,每位取反,末位加1
4.反码表示法
反码是从原码探索补码过程中的产物
①整数
②小数
③0的反码
1)小数
2)整数
5.移码表示法
补码的表示很难直接判断其真值大小
小数无移码,所以小数补码之间的大小比较只能寻求临界值或者相同符号的补码进行比较
补码和移码只差一个符号位
用移码表示浮点数的阶码,能方便地判断浮点数的阶码大小
6.2数的定点表示和浮点表示
6.2.1定点表示
小数点按约定方式标出
前者为小数定点机,后者为整数定点机
6.2.2浮点表示
1.浮点数的表示形式
S尾数 |
j阶码 |
r基值 |
小数 (可正可负) |
整数(可正可负) |
取2,4,8,16等 |
原码或补码 |
移码或补码 |
– |
反映精度 |
反映范围 |
基值越大,可表示的浮点数范围越大,但精度越低 |
浮点数实际是用一对定点数(阶码和尾数)来表示
若浮点数未规格化,基数r=2,阶码数值部分为m位,尾数数值部分为n位,阶码和尾数符号各占1位
2.浮点数的表示范围
上溢:阶码>最大阶码
下溢:阶码<最小阶码 按机器零处理
①非规格化(规格化和非规格化的区别在于尾数的表示形式)
②规格化
1)最大正数
阶码:0,1111
尾数:0.1111111111
最大正数:0,1111;0.1111111111
真值:2的15次方×(1-2的-10次方)
2)最小正数
阶码:1,0001
注:最小阶码是-15而不是-16的原因:阶码一共5位,且用补码表示,取值范围为[-16,15],最值-16用于处理特殊值,所以实际的阶码取值范围是[-15,15]
尾数(规格化):0.1000000000
尾数(非规格化):0.0000000001
注:因为是规格化,尾数如果是用原码表示,那么第一数位为1,如果用补码表示,符号位要和第一数位不同,与此同时,尾数不能为0,这是因为如果尾数为0,阶码无论何值,该浮点数直接按机器零处理
最小正数:1,0001;0.1000000000
真值:2的-15次方×2的-1次方
3)最大负数
阶码:1,0001
尾数:1.1000000000
最大负数:1,0001;1.1000000000
真值:-2的-15次方×2的-1次方
4)最小负数
阶码:0,1111
尾数:1.1111111111
最大正数:0,1111;0.1111111111
真值:-2的15次方×(1-2的-10次方)
3.浮点数真值的规格化形式
r=2 尾数最高位为1
…
基数不同,浮点数的规格化不同
4.浮点数的规格化
r=2 左规 尾数左移1位,阶码减1
右规 尾数右移1位,阶码加1
6.2.3定点数和浮点数的比较
①当位数相同时,浮点数的表示范围大得多
②当浮点数为规格化数时,相对精度高
③浮点数运算步骤多,速度低,线路冗杂
④溢出的判断方法不同,浮点数对阶码进行判断,定点数对数值本身进行判断
机器零:
①当浮点数尾数为0时,不论其阶码为何值,按机器零处理
②当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
6.2.5IEEE 754标准
阶码用移码表示,短实数的偏移量是7FH,换算为十进制就是127
尾数用原码表示,在IEEE中有效位表示为1.fffff…ffff,最高位为1(这个1并不是符号位,而是数值位,所以称为特殊规格化),实际表示中,这个1省略,是一种特殊的规格化
基值的指数e=阶码(写在32位二进制中的二进制位)-127
在解答题目时,一定记得要写这个表格
6.3定点运算
6.3.1移位运算
在计算机中,移位与加减配合,能够实现乘除运算(小数点不动)
1.逻辑移位
2.算术移位
有符号数的移位运算
算术移位规则
6.3.2加法与减法运算
1.补码的加减法公式
①加法
红箭头标注的话的意思是,直接进行补码的加法,在运算时,连同符号位一起进行加法运算,进位自然丢掉,不算溢出
②减法
2.溢出判断
①一位符号位判溢出
1)参加操作的两个数符号相同,其结果的符号与原操作数的符号不同,即为溢出
2)最高有效位进位和符号位的进位异或结果为1,即为溢出/最高位进位和次高位进位异或结果为1,即为溢出
②两位符号位判溢出
“其余为数值部分”的意思是只需要把最高位变成符号,其余部分包括小数点的位置都不动
例:
10是下溢
01是上溢
6.3.3乘法运算
符号位由异或运算求得
数值部分可用加和移位实现,逻辑右移n次,加n次
由乘数的末位决定被乘数是否与原部分相加,然后右移1位形成新的部分积,同时乘数右移1位,末位移丢,空出高位存放部分积的低位
被乘数只与部分积的高位相加
以上过程即为原码乘法
6.3.4除法运算
商需左移4次(被除数数值位有几位就左移几次),上5次商
6.4浮点四则运算
6.4.1浮点加减运算
1.对阶
①求阶差
②对阶原则
小阶向大阶看齐,即小阶的尾数向右移位,每移一位,阶码加1,直到两数的阶码相等为止
2.尾数求和
对阶后的尾数按定点数加减法运算规则求和(差)
以双符号位的补码形式进行加减法操作
3.规格化
①规格化数的定义
②规格化数的判断
原码 |
反码 |
补码 |
不论正数、负数,第一数位为1 |
符号位和第一数位不同 |
符号位和第一数位不同 |
③左规
尾数是以补码的形式存在的
所以补码的规格化标准是:符号位和第一数位不同
④右规
4.舍入
在对阶和规格化的过程中,可能出现尾数末位丢失,引起误差,需考虑舍入
①0舍1入法
②恒置1法
舍入可能导致再次溢出,此时需再做一次右规
5.溢出判断
阶码溢出的情形总结:
①对阶操作时,小阶看大阶,阶码不会发生溢出
②尾数舍入时,由于舍入原则,如0舍1入法,可能还需要右规,导致阶码增大,可能会引起阶码上溢
③右规可能引起阶码上溢
左规可能引起阶码下溢
④尾数溢出时,结果不一定溢出(双符号位或者是单符号位加减法时符号位产生的进位自然舍去),此时应当右规,若右规之后阶码溢出则结果溢出