查到的资料是说根据IEEE 754标准,js中number使用64位固定长度来表示,也就是标准的double双精度浮点数。但是我在MDN查阅位运算符时发现有这样的描述所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数。
从64变为32,精度不就丢失了吗?谁能帮忙解答下,谢谢。
查到的资料是说根据IEEE 754标准,js中number使用64位固定长度来表示,也就是标准的double双精度浮点数。但是我在MDN查阅位运算符时发现有这样的描述所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数。
从64变为32,精度不就丢失了吗?谁能帮忙解答下,谢谢。
27 回答13k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.7k 阅读
4 回答2.3k 阅读✓ 已解决
如果你拿超过32【有符号的算31】的来运算是的,但一般的业务场景很少有这么多位的,至少我目前还没有遇过,而且实际编码中也很少用到位运算,我更多时候是用来做类型转换和向下取整的,比如如果需转换成
int
就变量|0
——这样可以保证结果是数值,不会出现NaN