JS中常用的按位运算应用
~~
取反再取反, 返回整数
- 原理: 按位取反简单的理解就是改变运算数的符号并减去1
- 效果: 取整,小数位舍弃。如果isNaN,返回0
- 示例:
~~1.99 // 1 ~~-1.99 // -1 ~~'1.99' // 1 ~~'qwdasd' // 0 ~~true // 1
>>
右移运算符,返回整数 - 原理:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
- 效果:舍弃小数位(浮点数不支持位运算,所以会先转化为整数再运算。其它同理),右移n位相当于除以2的n次方, 然后取floor
- 示例:
11 >> 2 // 2 -11 >> 2 // -3 11.9 >> 2 // 2
<<
左移运算符,返回整数 - 原理:与
>>
相反 - 示例:
2 << 2 // 8 -2 << 2 // -8 -2.9 << 2 // -8
&
按位与
- 原理:只有两个位的值都为1时,才返回1,否则返回0
- 示例:
& 1
运算可以“快速”判断奇数还是偶数
6 & 1 // 0 , 偶数
9921 & 1 // 1 , 奇数
|
按位或
- 原理:只要有一个位值为1,则返回1
- 示例:
| 0
运算可以向下取整,不同于Math.floor,小数位会直接舍弃
7.998 | 0 / 7
-7.98 | 0 / -7
^
按位异或
- 原理: 两个数中只有一个1时返回1,其他情况返回0
- 示例:
var num1 = 1, num2 = 2;
num1 ^= num2; // num1 = num1 ^ num2 = 1 ^ 2 = 3
num2 ^= num1; // num2 = num2 ^ (num1 ^ num2) = 2 ^ (1 ^ 2) = 1
num1 ^= num2; // num1 = num1 ^ num2 = 3 ^ 1 = 2
console.log(num1); // 2
console.log(num2); // 1