位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。
移位運算符包括,“左移運算符”,“有符號右移運算符”、“無符號右移運算符”。
位運算
-
異或 ^
異或運算符是用符號“^”表示的,其運算規律是:
兩個操作數的位中,相同則結 果爲0,不同則結果爲1
簡單實例/** * @function: 異或位運算 */ @Test public void test(){ int a=33; int b=32; System.out.println(a^b); }
輸出結果:1
因爲33轉換成二進制是100001,32轉換成二進制是100000,異或結果是000001拓展:異或的應用
第一:簡單的加密解密
因爲a ^ b ^ b = a
第二:高效率交換兩個整數/** * @function: 使用異或,高效率交換兩個整數 */ @Test public void test2(){ int a=100; int b=88; //使用異或交換 a=a^b; b=a^b; a=b^a; System.out.println(a); System.out.println(b); }
運行結果:
其實兩個應用道理是相同的,一個數異或另一個數兩次得到的還是他本身
-
與 &
與運算符用符號“&”表示,其使用規律如下:
兩個操作數中位都爲1,結果才爲1,否則結果爲0
簡單實例/** * @function: 與位運算 */ @Test public void test3(){ int a=33; int b=32; System.out.println(a&b); }
運行結果:32
因爲因爲33轉換成二進制是100001,32轉換成二進制是100000,與結果是100000 -
或 |
或運算符用符號“|”表示,其運算規律如下:
兩個位只要有一個爲1,那麼結果就是1,否則就爲0
簡單實例/** * @function: 或位運算 */ @Test public void test4(){ int a=33; int b=32; System.out.println(a|b); }
運行結果:33
因爲因爲33轉換成二進制是100001,32轉換成二進制是100000,或結果是100001 -
非 ~
非運算符用符號“~”表示,其運算規律如下:
如果位爲0,結果是1,如果位爲1,結果是0
簡單實例/** * @function: 非位運算 */ @Test public void test5(){ int a=33; int b=~a; System.out.println(b); System.out.println(Integer.toBinaryString(b)); }
運行結果:
移位運算
移位運算操作的就是二進制的位
簡單的,<<n 左移相當於乘2的n次方,>>n(>>>n) 右移相當於除2的n次方,然後這個>>>與>>的區別是對負數的處理上
簡單示例
/**
* @function: 移位運算
*/
@Test
public void test6() {
int a = 32;
int b = -32;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(a >> 2));
System.out.println(Integer.toBinaryString(b >> 2));
System.out.println(Integer.toBinaryString(a >>> 2));
System.out.println(Integer.toBinaryString(b >>> 2));
System.out.println(Integer.toBinaryString(a << 2));
System.out.println(Integer.toBinaryString(b << 2));
}
運行結果