【基礎算法】位運算-基本運算
阿新 • • 發佈:2018-02-21
-c 我們 stat 掌握 log == led clas pre
把最左邊位到i位都清0的方法
把第i位到第1位都清0的方法
以上8種基本運算很重要。每一位想要掌握位運算的朋友,上面的基本運算都須要很熟練的掌握
上一篇中我們分析了位的定義,這一篇中我們分析一下位的基本運算
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; }
把第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種基本運算很重要。每一位想要掌握位運算的朋友,上面的基本運算都須要很熟練的掌握
【基礎算法】位運算-基本運算