大佬之所以会被称之为大佬,是因为他们有些操作真的够骚。大佬的代码里面往往充满了各种“骚操作”,不加注释绝对看不懂的那种。令人头疼的一点就是大佬们对位运算的使用,短短几行,就可以让你云里雾里。现整理了一些位运算的小妙招,虽然花里胡哨,但是足可以令人拍案叫绝。
1.使用左移运算符 << 得到2的次方
console.log(1 << 2) //4————2的2次方
console.log(1 << 10) //1024————2的10次方
2.使用 & 判断奇偶性
偶数 & 1 = 0
奇数 & 1 = 1
console.log(5 & 1) //1
console.log(8 & 1) //0
3.使用 !! 将数字转为布尔值
所有非0的值都是true,包括负数、浮点数
console.log(!!1) //true
console.log(!!0) //false
console.log(!!-1) //true
console.log(!!6.18) //true
4.使用~~ >> << >>> | 来取整
相当于使用了 Math.floor()
console.log(~~11.11) // 11
console.log(11.11 >> 0) // 11
console.log(11.11 << 0) // 11
console.log(11.11 | 0) // 11
console.log(11.11 >>> 0) // 11
console.log(-11.11 >>> 0) // 4294967285
其中 >>> 不可以对负数取整
5.使用 n + 0.5 | 0 来对n进行四舍五入
相当于 Math.round()
let x = 11.99;
let y = 11.11;
console.log(x + 0.5 | 0) //12
console.log(y + 0.5 | 0) //11
// 如果是负数,则变成 A - 0.5 | 0
let r = -11.99;
let z = -11.11;
console.log(r - 0.5 | 0) //-12
console.log(z - 0.5 | 0) //-11
6.使用^判断符号是否相同
(a ^ b) >= 0; // true 相同; false 不相同
let b = 12;
let c = -13;
console.log((a ^ b) >= 0) //true
console.log((a ^ c) >= 0) //false
7.n & (n - 1) 判断n是否为2的整数幂
如果为 0,说明 n 是 2 的整数幂
leetcode#231
let d = 20;
let e = 32;
console.log(d & (d - 1)) //16————说明d不是2的整数幂
console.log(e & (e - 1)) //0————说明e是2的整数幂
【作者水平有限,欢迎大家在评论区交流指正~】
网友评论