JavaScript - 数字与0进行或运算的取整操作

2019-10-09  本文已影响0人  __唐一__

作者:唐一

背景:最近看的React源码中提到这个,就想了解下

知识储备

1、标准。JavaScript采用的IEEE754标准作为数字存储标准

采用IEEE754也是JavaScript天生就带bug的渊源了

2、IEEE754规定双精度数值以64位存储,其中1位为符号位,11位为指数位,剩余52位为尾数为

不知道指数位和尾数位、符号位的自行找计算机组成原理充电

S PPP PPPP PPPP TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT TTTT

S:符号位

P:指数位

T:尾数位

对于无符号数值,则位11位指数位,53位尾数位

3、JavaScript的位运算以32二进制执行

进行位运算时,先将数值转换成32位有符号整数(重点:整数),既然取整了,自然就去除了小数部分了

正文

还有什么正文呦,上面的只是储备都讲完了。。。

// 这里才是重要的
let floatNum = 10 / 3;
console.log(floatNum); // 3.3333333333333335
console.log(floatNum.toString(2)); // 转换成二进制表示的字符串
// "11.010101010101010101010101010101010101010101010101011"

let intNum = floatNum | 0;
console.log(intNum); // 3
console.log(intNum.toString(2)); // "11"

那么floatNum0进行或运算后,舍弃了小数部分,二进制也由原来的妖妖点XXXX变成了妖妖

0000 0000 0000 0000 0000 0000 0000 0011

0000 0000 0000 0000 0000 0000 0000 0000

上面的3下面的0进行与运算,也即是全部保留3的位数据,最终还是3

所以主要| 0的操作主要是看中了取整的功能,位运算的不是主要看点

Note:好高级的样子?但是我不建议你这么用

1、可读性低,没有注释别人不知道你在干嘛

2、丢失高位数据,原本52(或53)位的数据,被舍弃掉高位的21(或22位)的数据,非常危险

上一篇 下一篇

猜你喜欢

热点阅读