位運算
1. &:按位與
- 規(guī)律:
- 一假則假
- 任何位上的數(shù)和1相&得到的結(jié)果還是那個數(shù)
2. |:按位或
- 規(guī)律:
- 一真則真
3. ^:按位異或
- 規(guī)律:
- 不同為1代态,相同為0
- 異或的結(jié)果和參與運算的順序沒有關(guān)系
- 相同的兩個數(shù)異或等于0
- 任何一個數(shù)異或上0蒂破,結(jié)果不變
- 任何一個數(shù)異或上同一個數(shù)兩次,結(jié)果不變
4. ~:按位取反
5. <<:左移(左移后迷帜,溢出位去掉伯诬,后面補0。)
- 規(guī)律:
- 左移就是用左移的數(shù)乘以2的移動次冪
例如:
9 << 1 == 9 * 2(1) == 18
9 << 2 == 9 * 2(2) == 9 * 4 == 36
注意點:由于左移運算椭蹄,被移動的數(shù)最高位會被拋棄,所以左移有可能會改變一個數(shù)的正負形
6. >>:右移(右移后净赴,溢出位去掉绳矩,前面補上符號位,符號位是什么就補什么玖翅。)
- 規(guī)律:
- 右移就是用右移的數(shù)除以2的移動次冪
例如:
9 >> 1 == 9 / 2(1) == 4
9 >> 2 == 9 / 2(2) == 9 / 4 == 2
注意:負數(shù)的左移右移是補碼在移動翼馆,因為負數(shù)都是以補碼的形式存儲在內(nèi)存中的
7. 應(yīng)用場景
如果想讓某一個數(shù)乘以或者除以2的n次冪,最高效的運算方法就是左移右移n位金度。
8. 用位運算實現(xiàn)兩個數(shù)的交換
int a = 5;
int b = 10;
- 中間量方式
int temp = a;
a = b;
b = temp;
- 無中間量
a = a + b;//a = 15
b = a - b;//b = 15 - b = 原來a的值
a = a - b;//a = 15 - b(原來a的值) = 原來b的值
- 位移
a = a ^ b;
b = a ^ b;//b = (a ^ b) ^ b = a
a = a ^ b;//a = a ^ (a ^ b) = b