位操作

异或

异或运算又名半加运算,相同为0,不同为1。

Tips

  1. 一个比特与对它取反的值做异或,结果总是1。因此a^(~a)的结果是1s(一串1)
  2. x&(~0<<i)将x的最左边i位清零
  3. x^0s = x x^1s = ~x

#常见位操作

获取

1
2
3
var getBit = function (num,i) {
return (num&(1<<i))
}

置位

1
2
3
var setBit = function (num,i) {
return (num|(1<<i))
}

清零

1
2
3
4
5
6
7
8
9
10
11
var clearBit = function (num,i) {
return (num&(~(1<<i)))
}
//将num最高位至i位(含)清零
var clearBitsMSBthoughti = function (num, i) {
return num & ((1 << i) - 1)
}
//将i位至0位(含)清零
var clearBitsIthought0 = function (num, i) {
return num (~((1 << i) - 1))
}

更新

1
2
3
4
var updateBit = function (num, i, v) {
var mask = ~(1 << i)
return (num & mask) | (v << i)
}