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个时钟周期

所以乘法和除法在运行的速度上弱于加法减法。

但我们可以用位运算来对乘法和除法进行降维运算

参考

https://www.zhihu.com/question/21592697

posted @ 2017-06-30 11:28  mayufo  阅读(551)  评论(0编辑  收藏  举报