取模
由于偶数的最低位为 0,奇数为 1,所以取模运算可以用位操作来代替。
// 位操作
if (value & 1) {
// 奇数
} else {
// 偶数
}
取整
~~9.12 //9
~~'2.4' //2
~~'-2.4' //-2
~~undefined //0
~~null //0
Number(undefined) //NaN
Number(null) //0
位掩码
const a = 1
const b = 2
const c = 4
const options = a | b | c
通过定义这些选项,可以用按位与操作来判断 a/b/c 是否在 options 中。
// 选项 b 是否在选项中
if (b & options) {
...
}
左移
左移运算将数对应的二进位全部向左移动若干位,高位丢弃,低位补 0
。左移运算的运算符为 <<
。
5<<4 //80 类似5*2的四次方
右移
80 >> 4 //5 类似5/(2的四次方) 当除以数字小于1则等于0,例如
4 >> 2 //1
4 >> 3 //0
位运算做授权
// 位运算操作
// 定义
const STYLE = 1;
const CLASS = 1 << 1;
const CHILDREN = 1 << 2;
// 授权
let vnodeType = STYLE | CLASS;
// 判断 &
console.log("vnodeType的类型STYLE", !!(vnodeType & STYLE));
console.log("vnodeType的类型CLASS", !!(vnodeType & CLASS));
console.log("vnodeType的类型CHILDREN", !!(vnodeType & CHILDREN));
// 删除授权
vnodeType ^= CLASS;
console.log("vnodeType的类型STYLE", !!(vnodeType & STYLE));
console.log("vnodeType的类型CLASS", !!(vnodeType & CLASS));
console.log("vnodeType的类型CHILDREN", !!(vnodeType & CHILDREN));
网友评论