# 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 // 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,同样改运算得到的结果也会对原数字取整,舍弃小数部分。

2 >> 1 // 1
2.3 >> 1 // 1
-2.3 >> 1 // -1
1
2
3

# << 左移一位

说明

🔊 << 左移,即 原数字 * 2,同样改运算得到的结果也会对原数字取整,舍弃小数部分。

2 << 1 // 4
2.3 << 1 // 4
-2.3 << 1 // -4
1
2
3

# ^ 异或

说明

🔊 ^按位异或是两个数中只有一个1时返回1,其他情况返回0。

2 ^ 1 // 3
1

# || && 扩展

说明

  • a || b a为真,则取a,反之,取b
  • a && b a为真,则取b,反之,取a
上次更新: 6/19/2020, 12:08:00 PM