javascript - 1.25 >> 0 结果为什么是 1

查看:144
本文介绍了javascript - 1.25 >> 0 结果为什么是 1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

想了一下,没想通。MDN上说的会把操作数当作32位整数,即使1.25转为2进制,然后当作整数二进制,他怎么会变成1呢?

解决方案

首先解释下为什么 ~~ 可以达到 Math.floor() 类似的效果:
关于 ~(位取反),我们可以从 ECMAScript 了解到它的算法,注意到第二步,再进行位取反前,需要先将数值进行 ToInt32 运算,而在 ToInt32 里,有一个 sign(number) * floor(abs(number))——这是取整的操作。

因此用 ~~ 来取整,实际是用 ToInt32 时的取整操作,类似的其他操作(如 num >> 0 ; num | 0)也一样。

但这些操作也有一个很大的问题,就是当需要取整的数超过 32 位里,操作会得到一个错误的值,因为在 ToInt32 里除了取整操作,还把 数值 % 232(转成 32 位数值)。

如 ~~17179869222.23042 == 38(正确取整后的值应该是 17179869222)

这篇关于javascript - 1.25 >> 0 结果为什么是 1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆