1s代表与x等长的1串,0s代表与x等长的0串
x ^ 1s = x ,x ^ 0s = ~x,x ^ x = 0
x & 1s = x ,x & x = x
与1与还是它本身,与0或还是它本身。
1、获取
获取i位是1还是0。返回值为1就是1,返回值为0就是0。
将1左移i位,会得到第i位为1,其余位都为0的数,形如:000001000。此时与要判断的数相与就可以单独判断i位。
boolean getBit(int num,int i){
return ((num&(1<<i))!=0);
}
2、设置
将某一位设为1。
将1左移i位,与num进行或运算后,不影响其他位,将i位数据设为1。
int setBit(int num,int i){
return num |(1<<i);
}
3、清零
将某一位设为0。
将1左移i位,并取反后,得到形如111101111的数(i位为0)。与num进行相与运算,不影响其他位,将i位数据设为0。
int clearBit(int num ,int i){
int mask=~(1<<i);
return num&mask;
}
4、更新
更新第i位。
将清零操作和设置操作结合。先将i位清0,然后跟据传入的v确定更新为0还是1。
v是0则是0,v是1则是1。
int updateBit(int num,int i,int v){
int mask=~(1<<i);
return (num&mask)|(v<<i);
}