JS 第七大原始数据类型,用于表示大于2^53 - 1的整数,这也是JS中Number类型可以表示的最大数字。
BigInt(整数|字符串)typeof 可以检测返回 七大原始数据类型:
'null' 'undefined' 'boolean' 'number' 'string' 'symbol' 'bigint'
以及 'object' 'function'
支持 +、*、-、**、%
不能使用Math中的方法,不能与任何Number混合运算,转换成Number会丢失精度
与Number比较会进行隐式转换
JS没有整数类型,所有数字(Number)均以 双精度64位浮点格式 表示,遵循 IEEE 754 标准。
由 8Byte,64bit 组成。
bit63 符号位, bits62-52 指数位(移码), bits51-0 尾数位.
11位指数位, 52位尾数位, 最大尾数位拉满1, 再加上省略的默认整数位1, 可表示 53位1 即 2^53-1。
大于52位尾数的数, 无法储存的位会被忽略,出现和小数一样的精度丢失情况,不同的数被储存后存在数与其完全相等。
安全,代表精度没有损失,代表双精度展示 和 整数是一对一对应的的。
Number.MAX_SAFE_INTEGER Number.POSITIVE_INFINITY Number.MAX_VALUE Infinity
计算机采用科学计数法储存数,科学计数法 与 原码 反码 补码 移码 计算机原理。
二进制1 = 2^1-1,二进制 11 = 2^2-1,二进制 111 = 2^3-1, 二进制 53位1 = 2^53-1
2^53 - 1 双精度64位浮点格式 默认整数位1, 加上52位尾数位全为 1,共 53位1, 为最大安全整数
2^53 指数位储存53, 尾数位需要储存53个0, 但最后1位0被忽略, 能被JS正常储存
2^53 + 1 指数位储存53,尾数位需要储存52个0, 和最后1位1被忽略, 因此与 2^53 相等。
尾数位数限制52位,再加上省略的一位,这53位是JS精度范围,需要将后面多余的位截掉
于是出现了精度损失
0.1 的二进制浮点数转换成十进制的结果是 0.100000001490116119384765625
0.2 的二进制浮点数转换成十进制的结果是 0.20000000298023223876953125
相加后 0.30000000000000004470348358154296875
即 0.30000000000000004
一是因为ASCII规范,二是因为物理上 内存的最小管理单位就是8bit, 1元素 管理8个小电容。
1B = 8b, Byte(字节) 是硬件能访问的最小单位, bit(位) 是 储存数据的最小单位
计算机只认识01, 人类认识数字字母, 建立规范将数字字母与01对应, 将字母编码为01给计算机执行。
ASCII编码(全称American Standard Code for information Interchange 美国信息交换标准码)
包含数字 字母 标点符号, 共计 128个, 2^7, 并扩容为 2^8, 8 bit, 1 Byte。
为什么我的 1000m宽带,下载速度只有 100MB/s ?
bit 位 存储数据的最小单位,也是物理意义上的数据储存的最小单位
Bite 字节 存储数据的基本单位,由人为定义并作为标准推广
500m宽带,讲的是带宽,也就是实实在在的 储存位 bit,其单位为 Mb/s
下载速度,讲的是 由人定义的数据的最小数据储存单位 Byte,其单位为 MB/s
b 代表 bit, B代表 Byte, 所以 宽带速度 / 8 进行单位转换 才是 下载速度