位运算

332 阅读2分钟

在实际编码中,如果涉及到数学运算,我们应该尽量考虑是否可以使用位运算。由于js中的数字都依照IEEE-754标准以64位存储。在位运算中,数字呗转换为有符号32位格式。每次运算符会直接操作该32位数以直接得到结果。尽管需要转换,但这个过程仍然是Js中最快的。

位运算中有六种操作符:

按位与(&)

两个操作数的对应位都是1时,则在该位返回1。

0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1;

如:

var result = 25 & 3; //1

console.log(result.toString(2)); //“1”

按位或(|)

两个操作数的对应位只要有一个为1时,则在该位返回1.

0 & 0 = 0; 0 & 1 = 1; 1 & 0 = 1; 1 & 1 = 1;

如:

var result = 25 & 3; //27

console.log(result.toString(2)); //“11011”

按位异或(^)

两个操作数的对应位只有一个为1,则在该位返回1.

0 & 0 = 0; 0 & 1 = 1; 1 & 0 = 1; 1 & 1 = 0;

如:

var result = 25 & 3; //26

console.log(result.toString(2)); //“11010”

按位取反(~)

操作位,遇0返回1,遇1返回0。

如:

var result = ~25; //-26

console.log(result.toString(2)); //"-11010"

左移

左移运算符m<<n,表示把m左移n位。在左移过程中,最左边的n位将被丢弃,同时在最右边补0。

比如:

00001010 << 2 = 00101000

右移

右移处理过程类似左移,只不过需要考虑是否有符号位。如果数字原先是负数,则右移之后在最左边补1,反之补0。

比如:

00001010 >> 2 = 00000010;

10001010 >> 2 = 11110001;