javascript中按位操作的应用,如何快速取整 判断字符串是否是包含某字符串
最近在看最基础的《javascript高级程序设计》看的灰常慢,看到按位运算这里,突然反思,这种鬼操作到底有什么实际的应用呢?
按位运算符有6个
&
按位与:a & b
|
按位或:a | b
^
按位异或:a^b
~
按位取非:~a
>>
右移: a>>2
<<
左移:a<<2
>>>
无符号右移:a >>> b
实际应用
求负数减1 反转操作
console.log(~true) //-2
console.log(~false) // -1
快速判断字符串中首付含有某个字符
if (~'mayufo'.indexOf('may')) {
console.log(true);
}
如果是-1 ~(-1) = 0
快速取整
console.log(~~30.79); //30
按位异或快速取整
console.log(30.79 | 0); //30
判断奇偶
console.log((32 | 0) & 1); //0为偶数,1为奇数
交换变量
var a = 1,
b = 2;
console.log(a, b);
a ^= b;
b ^= a;
a ^= b;
console.log(a, b);
快速进行幂计算
var c = 3; d = 2.45;e=16;
console.log(c<<3);//16 等于3*(2的3次方)
console.log(d>>0);//2(向右移0位,小数部分丢失,取整)
console.log(e>>3);//2 等于16/(2的3次方)
优化乘法和除法性能
加减计算只需要1个时钟周期
乘法需要10个时钟周期
除法需要30个时钟周期
所以乘法和除法在运行的速度上弱于加法减法。
但我们可以用位运算来对乘法和除法进行降维运算
参考