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

简介: 今天开始每天打卡一道面试题

B栈同步视频


猛戳 www.bilibili.com/video/BV1BF…


知识讲解


系统 + 全面


万能的Number


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


做一个实验


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


Number类型的表示范围


浮点数的结构


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


网络异常,图片无法展示
|


  • 第一部分(蓝色):用来存储符号位(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


  • 中级: 说出表示范围推导过程


  • 高级: 推导过程分析合理且可以和其他语言对比。


相关文章
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
914 3
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
287 3
|
自然语言处理 JavaScript 前端开发
当面试官再问我JS闭包时,我能答出来的都在这里了。
闭包(Closure)是前端面试中的高频考点,广泛应用于函数式编程中。它不仅指函数内部定义的函数,还涉及内存管理、作用域链和垃圾回收机制。闭包可以让函数访问其外部作用域的变量,但也可能引发内存泄漏等问题。通过合理使用闭包,可以实现模块化、高阶函数和回调函数等应用场景。然而,滥用闭包可能导致代码复杂度增加、调试困难以及潜在的性能问题。为了避免这些问题,开发时应谨慎处理闭包,避免不必要的嵌套,并及时清理不再使用的变量和监听器。
583 16
当面试官再问我JS闭包时,我能答出来的都在这里了。
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
548 156
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
搜索推荐 索引 Python
【面试题】缺失的第一个整数
【面试题】缺失的第一个整数
196 0
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

热门文章

最新文章