首页 > 技术文章 > 计算机数的表示方法(定点表示,浮点表示和规格化)

SValley 2021-03-22 17:05 原文

1.定点表示

链接:计算机系统基础(三)定点数 | Kaito's Blog (kaito-kidd.com)

纯整数:例如整数100,小数点其实在最后一位,所以忽略不写

纯小数:例如:0.123,小数点固定在最高位

整数+小数:例如1.24、10.34,小数点在指定某个位置

定点数指小数点在数中位置固定不变的数。定点数分为定点整数和定点小数,由于小数点位置固定不变,所以存储时小数点不进行存储,按照约定的位置计算数值。原理上讲,小数点的位置可以位于任何位置,但通常将定点数表示成纯小数或纯整数。

缺点:当机器数的字长一定的时候,数的范围和精度不能同时保证

 

2.浮点表示 &&IEEE754浮点数标准

链接:计算机系统基础(四)浮点数 | Kaito's Blog (kaito-kidd.com)

原理:利用科学计数法实现小数点不固定

V = (-1)^S *M *R^E

  • S:符号位,取值 0 或 1,决定一个数字的符号,0 表示正,1 表示负
  • M:尾数,用小数表示,例如前面所看到的 8.345 * 10^0,8.345 就是尾数
  • R:基数,表示十进制数 R 就是 10,表示二进制数 R 就是 2
  • E:指数(阶码),用整数表示,例如前面看到的 10^-1,-1 即是指数(会加上一个偏置常数)

 

 

IEEE754浮点数

  • 单精度浮点数 float:32 位,符号位 S 占 1 bit,指数 E 占 8 bit,尾数 M 占 23 bit
  • 双精度浮点数 float:64 位,符号位 S 占 1 bit,指数 E 占 11 bit,尾数 M 占 52 bit

规定:

  1. 尾数 M 的第一位总是 1(因为 1 <= M < 2),因此这个 1 可以省略不写,它是个隐藏位,这样单精度 23 位尾数可以表示了 24 位有效数字,双精度 52 位尾数可以表示 53 位有效数字
  2. 指数 E 是个无符号整数,表示 float 时,一共占 8 bit,所以它的取值范围为 0 ~ 255。但因为指数可以是负的,所以规定在存入 E 时在它原本的值加上一个中间数 127,这样 E 的取值范围为 -127 ~ 128。表示 double 时,一共占 11 bit,存入 E 时加上中间数 1023,这样取值范围为 -1023 ~ 1024。

 

规格化数:

补码的规格化形式意思是先将原码规格化,再转化成补码

 

 

 

 

 

 

规格化数的标准是真值的尾数部分最高位具有非零数字(相当于利用科学计数法的原则调整阶码和尾数)。在IEEE754中,这里规定尾数最高位在小数点前且为1,并且该位为隐藏位

 

浮点数的表示精度和表示范围:

链接:IEEE754 32位浮点数表示范围 - TQCAI - 博客园 (cnblogs.com)

单精度浮点数 float:

最大 0,11111111 ,111111……(23个1)        1,11111111 ,111111……(23个1)

表示范围:它能表示的最大二进制数为 +1.1.11111…1 * 2^127(小数点后23个1),而二进制 1.11111…1 ≈ 2,所以 float 能表示的最大数为  2^128 = 3.4 * 10^38,即 float 的表示范围为:-3.4 * 10^38 ~ 3.4 * 10 ^38。

表示精度:表示的最小二进制数为 0.0000….1(小数点后22个0,1个1),用十进制数表示就是 1/2^23。

最小0,00000000,000(22个0)1      这个时候使用的是非规格化数表示

 

 

规格化操作:


左规:尾数左移一位,阶码-1,指导数符和第一位数位不同为止????

右规:当尾数溢出(>1)时,需要右规

 

 

这个图上应该有点问题。

 

 

推荐阅读