javascript的位运算

1,按位非(NOT)

按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码

var num1 = 25;    // 二进制 00000000000000000000000000011001
var num2 = ~num1; // 二进制 11111111111111111111111111100110
alert(num2);      // -26

这里,对 25 执行按位非操作,结果得到了26。这也验证了按位非操作的本质:操作数的负值减 1。
因此,下面的代码也能得到相同的结果:

var num1 = 25;
var num2 = -num1 - 1;
alert(num2);         // "-26"

2,按位与(AND)

按位与操作符由一个和号字符( & )表示,它有两个操作符数。从本质上讲,按位与操作就是将两
个数值的每一位对齐。

var result = 25 & 3;
alert(result); //1

可见,对 25 和 3 执行按位与操作的结果是 1。为什么呢?请看其底层操作

 25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
AND = 0000 0000 0000 0000 0000 0000 0000 0001

原来,25 和 3 的二进制码对应位上只有一位同时是 1,而其他位的结果自然都是 0,因此最终结果
等于 1。

3,按位或(OR)

按位或操作符由一个竖线符号(|)表示,同样也有两个操作数。按位或操作在有一个位是 1的情况下就返回 1,而只有在两个位都是 0的情况下才返回 0。

var result = 25 | 3;
alert(result); //27

25 与 3 按位或的结果是 27:

25 = 0000 0000 0000 0000 0000 0000 0001 1001
 3 = 0000 0000 0000 0000 0000 0000 0000 0011
--------------------------------------------
OR = 0000 0000 0000 0000 0000 0000 0001 1011

 

4,按位异或(XOR)

按位异或与按位或的不同之处在于,这个操作在两个数值对应位上只有一个 1 时才返回 1,如果对
应的两位都是 1 或都是 0,则返回 0。

var result = 25 ^ 3;
alert(result); //26

25 与 3 按位异或的结果是 26,其底层操作如下所示

 25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
XOR = 0000 0000 0000 0000 0000 0000 0001 1010

 

posted on 2017-08-23 17:10  D&L  阅读(251)  评论(0编辑  收藏  举报