javascript - 1.25 >> 0 结果为什么是 1
阿神
阿神 2017-04-11 12:30:33
[JavaScript讨论组]

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

阿神
阿神

闭关修行中......

全部回复(3)
黄舟

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

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

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

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

PHP中文网

这是位运算,>>0就是右移0位,因为js中位运算不能能用与浮点型,所以很多时候都是用>>0来取整的

伊谢尔伦

二进制运算小数部分不参加了吧?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号