各种位运算技巧
1.一个数(i)转为2进制后,1的个数。
var counter
for(i; i>0; i>>=1){
if(i & 1==1){
counter++
}
}
或者
var counter
while(i!=0){
counter++
i&=(i-1)
}
2.另一种笨方法遍历2进制bit
var lastBit = n % 2
n = Math.floor(n/2)
while(n!=0){
let bit = n % 2
if(bit == lastBit){
return false
}
lastBit = bit
n = Math.floor(n/2)
}
3.n & (n-1)
converts the right most 1 to 0 .
n & (n-1)
把最右边的1转换为 0
4.
n ^ n = 0
n ^ 0 = n
- 这两个等式大家都知道,大家也知道它满足交换律。
我们可以利用这两个条件做一些好玩的事。比如
数组中只有一个元素出现了奇数次,请找出这个元素。
var result = 0 for(var item of array){ result ^= item } return result