【基礎算法】位運算-基本運算
來源:程序員人生 發布時間:2014-11-04 09:05:56 閱讀次數:2397次
上1篇中我們分析了位的定義,這1篇中我們分析1下位的基本運算
1. 移動
左移n位:乘以2的n次方
右移n位:除以2的n次方
(~0)左移n位:在1后面加上n個0 (注:~0不等于1,等于11…11)
x&(~0<<n):將最右側的n位清零
正數左移右側補0
正數右移左側補0
負數左移右側補1
負數右移左側補1
移動的作用總結:乘2,除2,右n位清零
2. 異或
x^0=x
x^x=0
x^1=~x
x^~x=1
異或的作用總結:取數,清零,取非,清1
3. 且運算
x&0=0
x&1=x
x&x=x
且運算的作用總結:位清零,位取數,取數
4. 或運算
x|0=x
x|1=1
x|x=x
或運算的作用總結:位清1,取數。
5. 取位
先把1左移i位
再把num與i做“與運算”
如果是0返回0,否則返回1
public static int getBit(int num, int i) {
i = (1 << i);
num = num & i;
if (num == 0)
return 0;
return 1;
}
也能夠直接把這個數右移i位后和1做與運算
public static int getBit2(int num, int i) {
return (num>>i)&1;
}
6. 設位
設置第i位的方法:X|00000010 (i=1)
public static int setBit(int num, int i) {
i = 1 << i;
return num | i;
}
7. 清位
把第i位清0的方法
public static int clearBit(int num, int i) {
i = 1 << i;
i = ~i;
num = num & i;
return num;
}
把最左側位到i位都清0的方法
public static int clearBitLtoI(int num, int i) {
i = 1 << i + 1;
i = i - 1;
num = num & i;
return num;
}
把第i位到第1位都清0的方法
public static int clearBitItoR(int num, int i) {
i = 1 << i + 1;
i = i - 1;
i = ~i;
num = num & i;
return num;
}
8. 更新位
步驟:清位+設位
public static int updateBit(int num, int i, int w) {
int temp = ~(1 << i);
num = num & temp;
w = w << i;
num = num | w;
return num;
}
以上8種基本運算非常重要,每位想要掌握位運算的朋友,上面的基本運算都需要非常熟練的掌握
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈