-
左移运算符 << 迅速得出2的次方,使用右移运算符 >> 迅速除以2的次方
2<<2 // 2*2^2=8 8>>1 // 8/(2^1)=4
-
使用 ^(按位异或)(不同为1,相同为0) 切换变量 0 和 1
// 三目运算符 toggle = toggle ? 0 : 1; // 异或 toggle ^= 1;
-
使用&(按位与)判断奇偶性(按位与只有当都为1时才为1)
// 偶数 & 1 = 0 奇数 & 1 = 1 8&1 //0 7&1 //1
-
使用 !! 将数字转为布尔值
!!-1 //true !!0 //false
-
取整
// ~(按位反)、>>(右移)、<<(左移)、>>>(带符号位右移)、|(按位或) 相当于使用了 Math.floor() ~~11.71 //11 11.71 >> 0 //11 11.71 << 0 //11 11.71 | 0 //11 11.71 >>> 0 //11
-
使用^(按位异或)来完成值交换 (异或:两个数字一样,结果为0;两个数字不一样,结果就是1)
let a = 7 let b = 1 a ^= b b ^= a a ^= b
-
使用^(按位异或)判断符号是否相同
(a ^ b) >= 0; // true 相同; false 不相同
-
使用^(按位异或)来检查数字是否不相等
(a ^ b) === 0; // true 相等; false 不相等
-
加法
function add(a, b){ if (a === 0 || b === 0) return a || b let num while(b !== 0){ num = a ^ b // 异或,不看进位的结果 b = (a & b) << 1 // 与运算,只看进位的结果 a = num } return a }
-
减法
function sub(a, b){ if (a === 0 || b === 0) return a || -b b = ~b let num while (b !== 0){ num = a ^ b b = (a & b) << 1 a = num } return a + 1 }
JS位运算
最新推荐文章于 2024-06-20 20:20:21 发布