運算子你忘了嗎
- 小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。
在平時開發過程中,經常發現自己對於一些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