運算符你忘了嗎

語言: CN / TW / HK

在平時開發過程中,經常發現自己對於一些java基本的運算符認識不夠深入,難免對於一些細節之處有疏漏。問題雖小 ,但很可能因為小問題造成大事故,千里之堤潰於螻蟻!

與(&)

  • &按位與的運算規則是將兩邊的數轉換為二進制位,然後運算最終值,運算規則即(兩個為真才為真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0(二進制運算)

int i = 80; //十進制 int j = 20; //十進制 String s = Integer.toBinaryString(i);//二進制 String s1 = Integer.toBinaryString(j);//二進制 System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", i, s); System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", j, s1); System.out.println(" 80 & 20 = 1010000 & 10100 =" +(80&20)); 1) 十進制數:80 轉成二進制後 1010000 2) 十進制數:20 轉成二進制後 10100 3) 80 & 20 = 1000 & 10100 =16

或(|)

  • | 按位或的運算規則是將兩邊的數轉換為二進制位,然後運算最終值,運算規則即(兩個為假才為假,一個為真即為真) 1|1=1 , 1|0=0 , 0|1=0 , 0|0=0(二進制運算) ``` int i = 80; //十進制 int j = 20; //十進制 String s = Integer.toBinaryString(i);//二進制 String s1 = Integer.toBinaryString(j);//二進制

System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", i, s); System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", j, s1); System.out.println(" 80 | 20 = 1010000 | 10100 =" +(80|20)); ``` 1) 十進制數:80 轉成二進制後 1010000 2) 十進制數:20 轉成二進制後 10100 3) 80 | 20 = 1000 & 10100 =84

異或(^)

  • ^異或運算符顧名思義,異就是不同,其運算規則為1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0

``` int i = 80; //十進制 int j = 20; //十進制 String s = Integer.toBinaryString(i);//二進制 String s1 = Integer.toBinaryString(j);//二進制

System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", i, s); System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", j, s1); System.out.println(" 80 ^ 20 = 1010000 ^ 10100 =" +(80^20)); ``` 1) 十進制數:80 轉成二進制後 1010000 2) 十進制數:20 轉成二進制後 10100 3) 80 ^ 20 = 1010000 ^ 10100 =68

取反(~)

  • 取反就是1為0,0為1 int i = 80; //十進制 String s = Integer.toBinaryString(i);//二進制 System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", i, s); System.out.printf("%d 取反後為 %d \n", i, ~i); 1) 十進制數:80 轉成二進制後 1010000 2) 80 取反後為 -81

取餘(%)

  • 在java中,對於正整數,一個表達式的值除以另一個表達式的值,返回餘數。 取模跟取餘如果細説篇幅太長,本篇只是做一個拋磚引玉的講述,歡迎大佬們在評論區補充相關 int i = 81; //十進制 int j = 20; //十進制 String s = Integer.toBinaryString(i);//二進制 String s1 = Integer.toBinaryString(j);//二進制 System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", i, s); System.out.printf(" 十進制數:%d 轉成二進制後 %s \n", j, s1); System.out.printf(" %d %% %d = %s %% %s = %d \n", i, j, s, s1, (i% j)); 1) 十進制數:81 轉成二進制後 1010001 2) 十進制數:20 轉成二進制後 10100 3) 81 % 20 = 1010001 % 10100 = 1

左移(<<)

  • 二進制位往左挪兩位,右邊補0,比如: 5的二進制位是0000 0101 , 就是把有效值101往左挪兩位就是0001 0100 ,正數左邊第一位補0,負數補1,等於乘於2的n次方,十進制位是20 int i = 80; //十進制 String s = Integer.toBinaryString(i);//二進制 System.out.printf("%d 十進制轉二進制後為 %s \n", i, s); System.out.printf("%d 左移 << 2位後為 %d \n", i, i << 2); 80 十進制轉二進制後為 1010000 80 左移 << 2位後為 320

帶符號右移(>>)

二進制位往右挪兩位,比如: 5的二進制位是0000 0101,右移兩位就是把101左移後為0000 0001,正數左邊第一位補0,負數補1,等於除於2的n次方,結果為1 int i = 80; //十進制 String s = Integer.toBinaryString(i);//二進制 System.out.printf("%d 十進制轉二進制後為 %s \n", i, s); System.out.printf("%d 帶符號右移 >> 2位後為 %d \n", i, i >> 2); 80 十進制轉二進制後為 1010000 80 帶符號右移 >> 2位後為 20

無符號右移(>>>)

  • 無符號右移運算符和右移運算符的主要區別在於負數的計算,因為無符號右移是高位補0,移多少位補多少個0。比如:15的二進制位是0000 1111 , 右移2位0000 0011,結果為3 int i = 80; //十進制 String s = Integer.toBinaryString(i);//二進制 System.out.printf("%d 十進制轉二進制後為 %s \n", i, s); System.out.printf("%d 無符號右移 >>> 2位後為 %d \n", i, i >>> 2); 80 十進制轉二進制後為 1010000 80 無符號右移 >>> 2位後為 20