首页 > 其他分享 >Day01 JS整数是怎么表示的 | 面试打卡365

Day01 JS整数是怎么表示的 | 面试打卡365

时间:2023-03-21 18:07:38浏览次数:35  
标签:表示 浮点数 整数 JS 打卡 52 部分 Day01 小数


知识讲解

系统 + 全面

万能的Number

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

做一个实验

typeof 1 // number
typeof 1.0 // number
1 === 1.0

Number类型的表示范围

浮点数的结构

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

Day01 JS整数是怎么表示的 | 面试打卡365_面试

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

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

也就是

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

  • 符号部分 -1 or 1
  • f的范围为1<=f<2 使用52位表示
  • 指数有正有负,指数位长度为11比特,所以能表示的数字范围为0~2047

所以很明显最大位应该由f决定,也就是说所有的52位用作表示整数部分。

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

因为小数部分只需要表示尾数就可以,整数部分可定等于一

52位太多不好理解,假设我们以3位(bit)数

0.10 (二进制) 可以表示为 1.00 * 2^-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 // 常数表示

面试攻略

精炼 + 系统 + 自洽

  • 基本概念:JavaScript 内部,所有数字都是以64位浮点数形式储存。
  • 整数表示范围不用直接分析

点评

  • 这道题属于基本概念题,但是如何用二进制表示浮点数很容易能够看出来,逻辑非常复杂。很容易看出应聘这的基本功,和理性思维能力。
  • 初级: 知道Number
  • 中级: 说出表示范围推导过程
  • 高级: 推导过程分析合理且可以和其他语言对比。


标签:表示,浮点数,整数,JS,打卡,52,部分,Day01,小数
From: https://blog.51cto.com/u_16011013/6140729

相关文章

  • Day02 - 0.1 + 0.2 === 0.3嘛 | 面试打卡365
    知识讲解系统+全面先说答案,0.1+0.2不等于0.3,因为浮点数表示小数的时候有精度损失。昨天我们已经说到,javascript中会使用52个bit表示小数部分。根据国际标准IEEE754,J......
  • Day03 - 数字超过最大限制的如何处理? | 面试打卡365
    知识讲解Javascript数字使用Number类型存储。Number类型是有64bit浮点数,所以肯定会出现超出的情况。在作死的边缘疯狂试探不过咱们还是可以简单的试探一下//计算问题Number......
  • JS获取时间getTime()
    JS中获取当前系统时间代码模板展示:......
  • js逆向
    一、思维逻辑1:对某个网站的登录参数加密进行js逆向解密,具体流程如下:二:通过异步请求启动器定位关键代码三:进入堆栈锁定关键代码下断点进行分析  四:进入函数内部的......
  • fastadmin页面执行js方法(点击按钮出现弹窗为例)
    fastadmin页面执行js方法(点击按钮出现弹窗为例)雯0609~于2023-01-0414:56:00发布339收藏文章标签:javascript前端html版权例子:在页面设置按钮,点击按钮出现alert弹......
  • CSharp: read or write json using System.Text.Json
     ///<summary>///温度高低///geovindu///</summary>publicclassHighLowTemps{///<summary>///高///<......
  • JSON parse error: Cannot deserialize value of type `java.util.Date` from String
    日志Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Cannotdeserializevalueoftype`java.util.Date`fromStr......
  • JSON-RPC调用智能合约相关方法
    1、首先remix部署智能合约获取合约地址,如图所示: 所示箭头分别表示(1)在以太坊私链上面进行部署(这里不演示私链搭建)(2)部署获取合约地址进行复制2、通过此命令获取发送交易的矿......
  • js异步经典之Promise
    异步要了解Promise首先需要了解异步,这是js一个老生常谈的问题,为什么js会有异步,这和js最开始的的作用是离不开的。js是单线程的语言,他主要是实现用户与浏览器的交互,以及操......
  • Going the distance with Babylon.js
    作者:JoshElster前言:DavidCatuhe,creatorandleaderoftheBabylon.jsopensourceproject前言:如果在当时你告诉我,有一天有人会有足够的动力来写一本关于它的书,我会......