JS整数是怎么表示的

587 阅读1分钟

Number类型

JavaScript内部,所有数字都是以64位浮点数形式存储,即使整数也是如此。所以1与1.0是相同的。

Number类型的表示范围

根据国际标准 IEEE 754,JavaScript 浮点数的64个二进制位。

a4c2e995a18c4fe4ad2594723c79a626_tplv-k3u1fbpfcp-watermark.awebp

  • 第一部分(蓝色):用来存储符号位(sign),第1位:符号位,0表示正数,1表示负数。
  • 第二部分(绿色):用来存储指数(exponent),第2位到第12位:指数部分。
  • 第三部分(红色):用来存储指数小数(fraction),第13位到第64位:小数部分(及有效数字)。

fraction决定了整数的安全表示范围

(-1)^s * f * 2^e

  • 符号部分 -1 or 1
  • f的范围为1<=f<2 使用52位表示
  • 指数有正有负,指数位长度为11比特,所以能表示的数字范围为0~2047 所以很明显最大位数应该由f来决定,也就是说所有的52位用作表示正数部分

52位为什么可以表示53位小数

因为小数部分只需要表示尾数就可以,正数部分可定等于1.

0.01(二进制)可以表示为1.00*2^-2

这样的话由于整数部分一定等于1,所以可以吧整数部分省略。 也就是说3尾数可以表示做小数,表示的时候可以表示4位小数。

为什么不是指数部分决定了数值的范围

0.1123*2^1024 这样就不能表示连续的数字了。

整数的表示范围

   Math.pow(2,53)-1  //最大
   Number.MAX_SAFE_INTEGER // 常数表示
   -(Math.pow(2,53)  - 1) // 最大
   Number.MIN_SAFE_INTEGER // 常数表示