浮点数标准IEEE754(读法:I tripleE 754)
在IEE754当中,阶码是用移码的方式表示的,移码只能用于表示整数,而阶码也必须是整数
回顾(移码:补码的基础上将符号位取反)
移码的定义:移码=真值+偏置值
大致流程:
用二进制来写出要表示的那个数的真值,进行加减操作前,真值需要转化为补码,然后再加上一个所谓的偏置值
例:求出-127所对应的的移码,具体步骤如下:
- 先用二进制表示出-127的真值-1111111B
- 在计算机内部,所有带符号整数的加减法运算都要先转化为补码,因此在进行真值和偏置值的相加运算之前,应该把真值转换为对应的补码
- 对于-1111111
- 原码:11111111 反码:1000000 补码:10000001
- 然后加上规定的偏置值【规定移码为8位,偏置值就等于2^(n-1)】2的8-1次方得128,偏置值也用二进制表示为10000000
- 将真值对应的补码与偏置值进行相加运算得到对应的移码
- 10000001+10000000=00000001(溢出来一个1,舍弃)
例:求出-3对应的移码,具体步骤如下:
- 先用二进制表示-3的真值,得到-11B
- 求出-11B对应的补码
- 原码10000011(因为表示的是整数,并且移码的位数是8位,因此需要在符号位后面补上五个0)反码:11111100补码:11111101
- 然后加上规定的偏置值【规定移码为8位,偏置值就等于2^(n-1)】2的8-1次方,偏置值也用二进制表示为10000000
- 将真值对应的补码与偏置值进行相加运算得到对应的移码
- 11111101+10000000=01111101(溢出一个1,舍弃)
当我们在确定一个移码的表示方案时,首先要确定的是一个偏置值。
为啥移码遵循在补码的基础上将符号位取反呢?
因为,偏置值一般取2^(n-1),此时移码=补码符号位取反
当然偏置值也可以取其他值
IEEE754遵循的就是偏置值为2^(n-1)-1,如果是8位移码,偏置值就是2^(8-1)-1=127。
这种方案对应的所有移码可以由偏置值为128对应的移码-1得到。
对图像进行分析:
数符表示了整个浮点数的正负性
阶码全1对应的是-128,阶码全0对应的是-127(在表示范围时具有特殊作用)
偏置值等于2的n-1次方-1,这里的n就是阶码的位数,在IEEE754当中,阶码位数固定是8
E-127中的E是用十进制表示的阶码
对于一个浮点数来说,如果它的尾数是用原码来表示的,我们希望它的第一个有效的数值位是1,所以我们就默认在尾数之前隐藏了一个最高位1(这样做就不用再去规格化处理了),因此虽然规定浮点数尾数是23位,但实际上是有24位的,只不过隐藏了最高位的1,1.M才是尾数表示的真正数值。
数符位、阶码位、尾数数值位各占多少位考试当中是不会说的,需要记住。
在进行移码-偏移量的操作中,可以把移码和偏移量看作是无符号数(就是把这些二进制数转化为十进制数再来进行减法操作)
例:将十进制-0.75转换为IEEE754的单精度浮点格式表示。
首先单精度浮点格式满足1+8+23的格式
把-0.75转换为二进制的形式:-0.11,由于尾数部分隐藏表示最高位为1,所以需要对-0.11进行规格化→-1.1X2^-1(X2^-1表示小数点要前移一位),这样就完成了规格化处理。
由于这个数是负数,所以数符取1
尾数部分=.1000000......第一位是1,后面全部都是0,凑够23位(隐含最高位1,补上这个1的话就变成了1.1000000......,和规格化后得到的二进制数一致)
阶码真值=-1(2的-1次方中的-1)
最后我们将得到的数符、用移码表示的阶码、尾数数值结合在一起就得到了用IEEE754单精度浮点数格式表示的十进制数-0.75
1 01111110 10000000000000000000000
例:IEEE754的单精度浮点数C0A00000H的值是多少?
先把16进制转换为2进制