# 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 || b
a为真,则取a,反之,取ba && b
a为真,则取b,反之,取a