1、位运算 NOT 由否定号(~)表示
位运算 NOT 是三步的处理过程:
- 把运算数转换成 32 位数字
- 把二进制数转换成它的二进制反码
- 把二进制数转换成浮点数
例如:
//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 是三步的处理过程:
- 把运算数转换成 二进制数, 位数不够左侧用0补位
- 遵循只有同为1的时候等于1,否则为0的原则求得二进制结果
- 将得到的 二进制数转为十进制。
例:
var a = 33; 0010 0001
var b = 47; 0010 1111=>0010 0001 转换为10进制 等于33
即 console.log( 33 & 47) // 33
3、位运算 OR 由符号(|)表示
位运算 OR 是三步的处理过程:
- 把运算数转换成 二进制数, 位数不够左侧用0补位
- 遵循只有同为0的时候等于0,否则为1的原则求得二进制结果
- 将得到的 二进制数转为十进制。
例:
var a = 27; 0001 1011
var b = 51; 0011 0011=> 0011 1011 转换为十进制 59
即 console.log(a | b) // 59
4、位运算 XOR 由符号(^)表示
位运算 XOR 是三步的处理过程:
- 把运算数转换成 二进制数, 位数不够左侧用0补位
- 遵循当只有一个数位存放的是 1 时,它才返回 1,否则为0的原则求得二进制结果
- 将得到的 二进制数转为十进制。
例:
var a = 77; => 0100 1101
var b = 61; => 0011 1101=> 0111 0000 转换为十进制 => 112
即console.log( 77 ^ 61 ) // 等于 112