JavaScript数值类型(Number类型)存储方式

与许多其他编程语言不同,JavaScript 不会定义不同类型的数,比如整型、长整型、浮点数等等。JavaScript 数值始终以双精度浮点数来存储,根据国际 IEEE 754 标准。

IEEE 浮点数标准是从逻辑上用三元组{S,E,M}来表示一个数 V 的,即 V=(-1)S×M×2E,如下图所示。
图1
关于这三种数值代表的意义,我将以单精度浮点数的一个例子来做具体阐述。

单精度和双精度的区别主要在于前者以32位二进制数存储数值,后者则是64位,而且每种数值的位数也不同,如下图所示:
在这里插入图片描述
举个例子,对于数-10.625来说,如果用单精度浮点型来存储它:
先把10.625转为二进制数 = 1010.101
1010.101 = 1.010101 * 23 ----这里的3就对应指数位E,有效数字位M对应010101
(这里需要说明,因为是二进制存储,所以每位的数字只会是0或1,在用科学计数法表示时,第一位必是1,所以有效数字位M不记录小数点前面的那个数字1)
符号位为1bit,为1是代表负数,为0代表正数

也就是说:
S–1
E–1000 0010
M–0101 0100 0000 0000 0000 000

这里特别说明一下E的取值,在②中已经得到指数为3,但指数的值有正有负(比如0.0001的指数就为负)。E为8bit,存储数组范围是0-255。

这里在存储时,将0-127的值用来代表负值,128-255的值来代表正值——比如指数值=-1,表现为E=127-1=126(0111 1110),指数值为1,E=127+1=128(1000 0000)。所以指数为3时,E=127+3=130(1000 0010)。

再举个例子加深理解
对于数值0.03125来说:① 0.03125 = 2-5 => 0.00001(二进制数表示) => 1 * 2-5
② 由①得指数为5
③ S=0(因为是正数) E=127-5=122(0111 1010) M=0000 0000…(23个0)

双精度浮点数也是类似的,只是位数的差异⬇
双精度浮点数存储格式
最后提供一个可以根据输入的十进制数给出单精度浮点数各位上数字的工具:单精度浮点数工具,✔的位置代表该位为1。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值