天天看点

js 位运算符 ~,& ,| ,^

1、位运算 NOT 由否定号(~)表示

位运算 NOT 是三步的处理过程:

  1. 把运算数转换成 32 位数字
  2. 把二进制数转换成它的二进制反码
  3. 把二进制数转换成浮点数

例如:

//31位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数
var a1 = 35;  //35    0000 0000 0000 0000 0000 0000 0010 0011 //为了看到清楚 4位断一下
var a2 = ~a1; //转换为 1111 1111 1111 1111 1111 1111 1101 1100
console.log(a2) // -26
           

位运算 NOT 实质上是对数字求负,然后减 1,因此 25 变 -26。例:

var a1 = 35;
var a2 = -a1 - 1 
console.log(a2) // -36
           
 2、位运算 AND 由和号(&)表示

位运算 AND 是三步的处理过程:

  1. 把运算数转换成 二进制数, 位数不够左侧用0补位
  2. 遵循只有同为1的时候等于1,否则为0的原则求得二进制结果
  3. 将得到的 二进制数转为十进制。

例:

var  a = 33;   0010 0001   
var  b = 47;   0010 1111
             =>0010 0001 转换为10进制 等于33
即 console.log( 33 & 47) // 33
           
3、位运算 OR 由符号(|)表示

位运算 OR 是三步的处理过程:

  1. 把运算数转换成 二进制数, 位数不够左侧用0补位
  2. 遵循只有同为0的时候等于0,否则为1的原则求得二进制结果
  3. 将得到的 二进制数转为十进制。

例:

var a = 27;  0001 1011
var b = 51;  0011 0011
          => 0011 1011  转换为十进制 59
即 console.log(a | b) // 59
           
4、位运算 XOR 由符号(^)表示

位运算 XOR 是三步的处理过程:

  1. 把运算数转换成 二进制数, 位数不够左侧用0补位
  2. 遵循当只有一个数位存放的是 1 时,它才返回 1,否则为0的原则求得二进制结果
  3. 将得到的 二进制数转为十进制。

例: 

var a = 77;  => 0100 1101
var b = 61;  => 0011 1101
             => 0111 0000 转换为十进制 => 112
即console.log( 77 ^ 61 ) // 等于 112 
           

继续阅读