IEEE 754
这一小节我们介绍一下IEEE 754以及它的移码运算、标准
IEEE 754移码运算
大家还记得移码是怎么算出来的吗?得到补码之后将符号位取反就是移码,但其实移码的定义为:移码=真值+偏置值
普通情况:比如8位移码的偏置值=128D=1000 0000B,即
IEEE 754:令偏置值=127D=0111 1111B,即偏置值为-1,比如真值 -128=-1000 0000B
移码=-1000 0000+0111 1111,这里我听咸鱼学长是说,因为被减数比减数更小,由于移码的位数只有8位,所有的加减运算都会在背后进行了模,那么我们根据这个,就可以将被减数+
得到10111 1111,所以移码=-1000 0000+10111 1111=1111 1111,得到-128在IEEE 754表示下的移码为1111 1111;另外还有一个数比较特殊,-真值=127=-111 1111B,得到移码=-111 1111+10111 1111=0000 0000,。所以我们得到两个特殊的值,-128在IEEE 754 移码表示以为1111 1111,-127在IEEE 754移码表示为0000 0000
IEEE 754标准
IEEE 754标准类型有三种,分别是单精度浮点数float、双精度浮点数double、还有long double
各位需要记住他们对应的数符、阶码、尾数数值以及他们的偏置值,阶码部分是用移码表示的,按正常来说,当阶码位数为8位的时候,移码表示的范围是[-128,127],但是前文提到,-128和127是一个特殊的数,具体怎么处理,我们之后再补充,因此真值正常范围是[-126,127]
尾数部分用原码表示,我们之前提到过原码的规格化,就是规格化后的原码第一位数必须是一个有效值,也就是1,忘记的同学可以回复一下之前的文章,计算机组成原理——第二章(18),所以我们就默认尾数第一位是1
例:将十进制数 -0.75转换为IEEE 754的单精度浮点数格式表示
我们想要IEEE 754的表示形式需要知道以下几个参数:数符、移码、尾数,(-0.75)转换成二进制为(-0.11),因为尾数第一位是1,所以我们将0.11左移得到(-1.1)*,所以我们就得到了数符=1,尾数真值=.10000000...(隐含最高位1),阶码=-1,移码=阶码真值+偏置值=-1+0111 1111=0111 1110(凑足8位)
所以IEEE 754的单精度浮点数表示=1 01111110 10000000000000000000000
例:IEEE 754 的单精度浮点数 C0 A0 00 00 H的值是多少
C0 A0 00 00 H ->1100 0000 1010 0000 0000 0000 0000 0000
数符=1
移码=1000 0001=真值+偏置值,真值=1000 0001-111 1111=(2)
尾数=.010000....0(隐含最高位1)尾数真值=(1.01)=1.25
浮点数真值=-(1.25)*=-1.25*4=-5
接下来我们讲一下阶码全为0和全为1的情况:
当阶码E全为0,尾数M不全为0时,表示非规格化小数,(0.x...xx)*
当阶码E全为0,尾数M全为0时,表示真值0
当阶码E全为1,尾数M全为0时,表示无穷大/无穷小
当阶码E全为1,尾数M不全为0,表示非数值“NaN”
知识回顾