JavaScript 位运算笔记

Stella981
• 阅读 498

之前一直以为,在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;
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算1.二进制对于原码,反码,补码而言,需要注意以下几点:(1).Java中没有无符号数,换言之,Java中的数都是有符号的;(2).二进制的最高位是符号位,0表示正数,1表示负数;(3).正数的原码,反码,补码都一样;(4).负数的反码它的原码符号位不变,其他位取反;(5).
Wesley13 Wesley13
2年前
java中的7个位运算运算符
位运算指的是针对整数的二进制进行的位移操作。位运算提供比算术运算更高的效率,但是位运算的代码可读性较差,建议所有使用位运算的地方写上注释。Java中提供7个位运算符用于位运算。左移(<<)左移运算是将操作数二进制值逐位左移若干位,左移过程中符号位不变,高位溢出则舍弃,低位则补0。范例结果范例结果00000001<<
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
Python运算符大全
  一、Python的算术运算  Python的算术运算符与C语言类似,略有不同。包括加()、减()、乘(\)、除(/)、取余(%)、按位或(|)、按位与(&)、按位求补(~)、左移位(<<)、右移位()、单目求反()、幂运算(\\)、整除运算(//)、增强运算、增强矩阵乘法(@)。  增强运算是将算术运算符或逻辑运算符放到等号的左
Wesley13 Wesley13
2年前
C语言位运算
位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点1它们都是双目运算符,两个运算分量都是整形,结果也是整形。        2"<<"左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。       3""右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空
Stella981 Stella981
2年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
可莉 可莉
2年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
Wesley13 Wesley13
2年前
C#位运算
在C中可以对整型运算对象按位进行逻辑运算,按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位,C支持的位逻辑运算符如下表。!(https://oscimg.oschina.net/oscnet/e3ff3ca0d8190d7cf6a5c8269feaab32004.jpg)1、位逻辑非运算
Wesley13 Wesley13
2年前
Java中关于位运算的面试题
位运算的效率是最高的,因为位位运算是直接对二进制进行操作位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形)面试题:a:判断一个数是否是奇数a&11;b:对2^n取余。a&(2^n1);c:如何判断一个数是否是2^na&(a1)
小万哥 小万哥
6个月前
Python 运算符
运算符用于对变量和值执行操作。在下面的示例中,我们使用运算符将两个值相加:pythonprint(105)Python将运算符分为以下几组:算术运算符赋值运算符比较运算符逻辑运算符身份运算符成员运算符位运算符算术运算符算术运算符用于对数字值执行常见的数