关于IEEE浮点数表示

计算机表示整数是精确的,这得益于任何一个整数都可以转换为若干个2的幂次方相加

关于IEEE浮点数表示

关于整数其主要包含两大类:

无符号整数:以unsigned int  32位无符号整型为例:

其表示的值是所有相应二进制位中为1的位对应2的幂次方相加

因此表示范围为 0 =》2的32次方-1(32位中全为1)   不能表示负数

有符号整数:以int 32位整型为例:

 

第一位为符号位:表示 关于IEEE浮点数表示   (若为1)     0(若为0)                              记为k1

31位同无符号表示类似:表示对应各二进制为1的位的幂次方相加                    记为k2

最终表示的数为  k1+k2

关于IEEE浮点数表示

 

因此有符号整数表示范围为

  • 正数:1=>2的31次方-1
  • 负数:-1(全为1)=>2的31次方(第一位为1后面全为0)

 

关于移位:

左移是一致的:在右边空出的位上补0

右移包含:
逻辑右移:在左侧空出的位上补0  对应无符号数的 除以2

算术右移:在左侧空出的位上补上符号位(0 或 1)对应有符号数的 除以2

 

以-2为例子

  • 其表示为:           11111111.....10   表示-2
  • 算术右移结果:    11111111.....11   表示-1

 

 

关于浮点数:

在10进制中,把一个数表示成a与10的n次幂相乘的形式,科学计数法为:

关于IEEE浮点数表示                 这里a的范围为1=>10 之间的小数

可以用很少的信息表示范围很大的数

 

同样的由于计算机使用二进制,其类似的科学计数法为:

关于IEEE浮点数表示                   这里a的范围为1=>2之间的小数

对于N可以 用无符号整数的思想可以精确表示

而对于a 采取二进制小数的表示思想          即总是前面认为有一个1  而后各个二进位为1的负幂次方相加

关于IEEE浮点数表示

 

 

因此一个浮点数可以采取三部分来表示符号位,阶码,尾数 

浮点数以32位float为例:

①第一位为符号位 1表示负数

②中间8位表示一个无符号整数,范围为0-255  该整数减去一个 Bias   128   将得到阶吗的范围:

-126 ~ +127

③最后23位为二进制小数   也就是各部分二进制位为1的负幂次方之和    

关于IEEE浮点数表示

 

同事根据中间8位 阶码  可以分为以下几类情况

 

非规格化 中间8位全为0   ,主要用于描述 靠近0的部分  此时的大小取决于 二进制小数

最小的小数为  2的 负23次方                                                      0000000......0001

最大的小数 (小于1)   2的-1次方+2的-2次方.....+2的-23次方      1111111......1111

 

 

规格化 中间8位不全为0或1  

那么后面部分的二进制小数  默认加上前导1  即   1.+2的负幂次方

 

无穷大:中间8位全为1   或者NaN                      2的255次方×若干个数   认为其无穷大