# JS位运算
# & 按位与
说明
🔊
&如果对应的位都为1,那么结果就是1, 如果任意一个位是0 则结果就是0。
可以用来求解奇数和偶数,因为1的最后一位是1,其余为均为0,数字与1做与运算后
如果结果为1,则说明该数字为奇数,繁殖为0,则为偶数。
n & 1 ? '我是奇数' : '我是偶数'
1
# | 按位或
说明
🔊
|如果对应的位有一个为1,那么结果就是1,如果都不为1,那么结果为0。
可以用来对数字向下取整,因为|运算是位运算,他会丢弃原数字的小数位,
如果将原数字与0进行或操作,则原数字的整数位不变,小数被丢弃,就可以得到该数字的整数位。
n | 0
2.2 | 0 // 2
2.9 | 0 // 2
-2.9 | 0 // -2
1
2
3
4
2
3
4
# ~ 按位取反
说明
🔊
~按位取反,即取该数字二进制反码,同样对,数字进行二次取反操作也可以得到该数字向下取整的结果。
~2 // 0000 0010 => 1111 1101
1
WARNING
💥首位为1,即负数的运算方式
- 首位符号不变,
- 其余位取反
- 其余位得到的正数 + 1
- 添加负号
1111 1101 // -3
第一步:1000 0010 // 保持首位不变 其余位取反为2
第二步: 000 0010 + 1 = 000 0011 // 其余位加1 3
第三步:加负号 -3
1
2
3
4
2
3
4
# >> 有符号右移一位
说明
🔊
>> 有符号右移,即 原数字 / 2,同样改运算得到的结果也会对原数字取整,舍弃小数部分。
2 >> 1 // 1
2.3 >> 1 // 1
-2.3 >> 1 // -1
1
2
3
2
3
# << 左移一位
说明
🔊
<< 左移,即 原数字 * 2,同样改运算得到的结果也会对原数字取整,舍弃小数部分。
2 << 1 // 4
2.3 << 1 // 4
-2.3 << 1 // -4
1
2
3
2
3
# ^ 异或
说明
🔊
^按位异或是两个数中只有一个1时返回1,其他情况返回0。
2 ^ 1 // 3
1
# || && 扩展
说明
a || ba为真,则取a,反之,取ba && ba为真,则取b,反之,取a