位运算符(Bitwise operators)
运算符名称 | 用法 | 描述 |
---|---|---|
按位与 | a & b | 在a,b的位表示中,每一个对应的位都为1则返回1,否则返回0。 |
按位或 | a | b | 在a,b的位表示中,每一个对应的位,只要有一个为1则返回1,否则返回0。 |
按位异或 | a ^ b | 在a,b的位表示中,每一个对应的位,两个不相同则返回1,相同则返回0。 |
按位取反 | ~ a | 反转a的每一个位。 |
左移位 | a << b | 将a的二进制串向左移动b位,右边移入0。 |
右移位 | a >> b | 把a的二进制串向右移动b位,丢弃被移出的所有位。 |
无符号右移位 | a >>> b | 把a的二进制串向右移动b位,丢弃被移出的所有位,并把左边空出的位都填充为0。 |
取整
a | 0 或者 a ^ 0 或者 a << 0 或者 a >> 0 相当于 parseInt(a)
2.35 | 0 // 2
-18.2 ^ 0 // -18
1.445 << 0 // 1
-3.14 >> 0 // -3
3.141 << 0 === parseInt(3.141) // true
判断数值奇偶性
a & 1 相当于 a % 2
if (a & 1) {
console.log(`${a}是奇数`)
} else {
console.log(`${a}是偶数`)
}
判断数值正负性(局限于整数)
a >>> 0
if (a >>> 0 === a) {
console.log(`${a}是正数`)
} else {
console.log(`${a}是负数`)
}
判断两个数是否相等(局限于整数)
(a ^ b) === 0 相当于 a - b === 0
if (a ^ b) {
console.log('a和b不相等')
} else {
console.log('a和b相等')
}
交换两个数(局限于整数)
a ^= b; b ^= a; a ^= b 相当于 let c = a; a = b; b = c
let a = -1
let b = 99
a ^= b
b ^= a
a ^= b
console.log(a, b) // 99 -1
乘法(局限于2的指数倍且操作数为整数)
a << b 相当于 a * 2 ** b
3 << 2 // 12
-5 << 1 // -10
34 << 2 === 34 * 2 ** 2 // true