JavaScript 位运算笔记

我与影子孤独终老i 提交于 2020-01-08 16:33:43

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

之前一直以为,在js的位运算中,双精度浮点数在内部会先被转成32位整数,再执行位运算,然后再转为64位数值,因此效率极低。今天实验发现,对浮点执行位运算只会导致数值不准确,而不会导致效率低下,相比乘法,左移位要快66%(其实就是浮点运算与整数运算的差距)。

以下结果在 IE 7 ~ IE 10 上测试得出

技巧1:移位运算比乘除法快(当因数是2的幂数)

<!-- lang: js -->
b = a << 1;

大概快 6.8%

技巧2:奇偶判断

<!-- lang: js -->
b = a & 1;

0位与1相与,相比于 x % 2,大概快 35%

技巧3:判断两个数符号是否相同

<!-- lang: js -->
(a ^ b) >= 0

相比于

<!-- lang: js -->
if ( a == 0 )
    return 1;
else if ( a > 0 )
    return b >= 0;
else
    return b <= 0;

其效率基本一样,但更简洁。

相比于

<!-- lang: js -->
(a * b) >= 0;

不会有溢出问题。

技巧4:判断一个数是否为2的幂

<!-- lang: js -->
(a & (a - 1)) == 0;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!