按位运算符
将数字转化为二进制,进行位运算比较
位指的是二进制的每一位,每一位进行位运算比较
对0和1进行操作
数字和二进制互转
var num = 10
num = num.toString(2) // 将10进制转换成2进制
'1010'
parseInt(num, 2) // 将2进制转换成10进制
function numberToBinary (num) {
var result = [];
if (num < 0) {
return num;
}
// 使用 do while 解决 num 等于 0 的情况
do {
var temp = num % 2;
temp == 0 ? result.push('0') : result.push('1');
num = Math.floor(num / 2);
} while(num != 0);
// 反转数组
result.reverse();
return result.join('');
}
按位语法
按位与 & 有0则0,无0则1,一假则假
按位或 | 有1则1,无1则0,一真则真
按位异或 ^ 相同位为0,不同位为1,生成新的二级制,转十进制
按位取反 ~
正数取反 +1 取反
负数取反 -1 取反
左移运算 << 二进制向右补n个0, num * 2^n次
右移运算 >> 二进制向左补n个0, Math.floor(num / z^n)
按位与&
有0则0,无0则1,一假则假
1 & 2 = 0
// 1 = 0000 0001
// 2 = 0000 0010
0000 0001
0000 0010
-------------------
0000 0000
parseInt(00000000, 2)
按位或|
有1则1,无1则0,一真则真
1 | 2 = 3
// 1 = 0000 0001
// 2 = 0000 0010
0000 0001
0000 0010
-------------------
0000 0011
parseInt(00000011, 2)
按位异或
相同位为0,不同位为1,生成新的二级制,转十进制
1 ^ 2 = 3
// 1 = 0000 0001
// 2 = 0000 0010
0000 0001
0000 0010
-------------------
0000 0011
parseInt(00000011, 2)
按位取反~
正数取反 +1 取反
负数取反 -1 取反
正数
~1 = -2
-(1 + 1)
负数
~-3 = 4
-(-3 - 1)
移位运算
左移运算 << 二进制向右补n个0, num * 2^n次
右移运算 >> 二进制向左补n个0, Math.floor(num / 2^n)
左移位
1 << 2
1 * 2^2 = 4
// 1 = 0000 0001
0000 0001 00
parseInt(0000100, 2)
右移位
1 >> 2
Math.floor(1 / 2^2) = 0
// 1 = 0000 0001
0000 0000 01
parseInt(0000000, 2)
作用
- 运算效率高
- 逼格
实战
奇偶判断
function oddOrEven(num) {
// 0 偶数 1 奇数
return num & 1
}
取整数
Math.floor(15.333)
~~15.2222
15
~15 = -14
~-14 = 15