標籤:順序 system col under += 關係 ack sys 執行
接著之前的運算子方面,今天主要回顧運算子的一些計算、優先順序方面的內容,以及一些流程式控制制中if-else 方面的知識。
賦值運算子(=、+=、-=、*=、/=、%=、&=、|=、^=、<<= 、>>=、 >>>=) byte/short/char 可以參與運算除了 = 以外,其餘的符號都要求這個變數得先有值注意:在 Java 中不支援連等定義但是支援連等賦值
int i = 5;i += i *= i -= 3; -> 15i = 5 + (5 * (5 -3)) = 15 int j = 7;j -= j *= j++;j=7-(7 *7) = -42
關係/比較子(==相等 !=不等 > < >= <=) 注意:不支援連著得比較方式
邏輯運算子(&與 |或 !非 ^異或 &&短路與 ||短路或) true & ture = true(就像是下棋,兩個人都要來才能下這盤棋)
|(讓某一位同學打一杯水,這杯水打過來有一個同學去了就行了)
!(電腦中的二進位非真即假,要麼是對的,要麼是錯的)
^(從物理學中總結出來的,指南針/磁石,只有一北一南才能碰到一起,相同為假,不同為真)
&&(如果前邊的運算式的結果為false,則後邊的運算式就不再運算,整個運算式的結果就確定為 false)
||(如果前邊的運算式的結果為 true,則後邊的運算式就不再運算,整個運算式的結果就確定為 true)注意:||如果在 && 的前邊可以把 && 短路掉
位元運算符注意:位元運算符針對整數的補碼進行運算,所以運算結果也是補碼& | ^ << >> >>> ~
& :將資料轉化為補碼形式,然後將 0 看作false,將 1 看作 true,按位進行與運算,最後將結果轉化位十進位來顯示 偶數 & 任一數字 = 偶數 正數 & 任一數字 = 正數 奇數 & 1 = 1 偶數 & 1 = 0
|:7 00000111 將資料轉化為補碼形式,按位進行或運算,最後將結果轉化位十進位顯示 11 00001011 奇數 | 任一數字 = 奇數 15 00001111 負數 | 任一數字 = 負數
^:7 00000111 將資料轉化為補碼形式,按位進行異或運算,最後將結果轉化為十進位顯示 11 00001011 6^12 = 10, 10^6 = 12 12 00001100 i^i=0,j^0 = j , a^b^b=a
交換值的方式方式一:異或法
int i = 5, j = 9;i = i^j;j = i^j; -> j = i^j^j; ->j=i;i = i^j; ->i = i^j^i; ->i = j;
方式二:加減法
int i = 5, j = 9;i = i+j;j = i-j; -> j=i+j-j; -> j = i; i = i-j; ->i = i+j-i; ->i = j;
方式三:追尾法
int i = 5, j = 9;int temp = i;i = j;j = temp;
總結:三種方式的比較異或法的效率是最高的。只能針對整數進行交換,局限性太大。(像小數,字元,字串就不能交換)加減法的效率是低於異或但是高於追尾。理論上可以交換數實值型別,但實際上很少用於交換小數。追尾法的效率是最低的。可以交換任意一個類型的值。
<<3 << 3 00000011
<<:將資料轉化為補碼,然後按照指定的位元向左移動,高位次移出的資料捨棄,低位次空出的位置補 0,最後轉化為十進位顯示 24 000 00011000 7 << 4 = 7 * 16=112(相當於乘以 2^4)在一定範圍內,左移幾位就是乘以 2 的幾次方
>> 10 >> 2 00001010
>>:將資料轉化為補碼,然後按照指定的位元向右移動,移出的資料捨棄,如果是正數,高位次空出補 0;如果是負數則補 1,最後將資料轉化為十進位顯示 0000001010 14 >> 3 =1在一定範圍內,右移幾位就是除以 2 的幾次方正數右移越移越小,最小是 0 負數右移越移越大,最大到 -1
>>>:無符號右移。將資料轉化為補碼之後,按照指定的位元向右移動,移出的資料捨棄,高位次空出,無論正負一律補 0。
~3 00000011 ~:將資料轉化為補碼之後,將 0<->1,最後將資料轉化為十進位顯示 11111100 ~10 = -11
~i = -i - 1 -4 10000100
三元運算子格式:邏輯值 ? 運算式1 : 運算式2執行順序:先執行邏輯值,如果邏輯值為 true,執行運算式1;反之則執行運算式2 注意:三元運算式本身是一個運算式,意味著這個運算式執行完成後需要一個結果 --- 這個結果必須能定義對應類型的變數來接住a > b ? "abc" : true; -> 沒有辦法定義一個統一類型的結果來儲存,這種寫法就是錯誤的
//三元運算式的嵌套int max = i > j ? (i > k ? i : k) : (j > k ? j : k);
//練習:輸出分數所對應的等級 >=90 -A >=80 -B >=70 -C >=60 -D <60 -E char level = score >= 90 ? ‘A‘:(score >= 80 ? ‘B‘ : (score >= 70 ? ‘C‘ : (score >=60 ? ‘D‘ : ‘E‘))); System.out.println(level);
擴充:從控制台擷取資料
import java.util.Scanner;Scanner s = new Scanner(System.in);int i = s.netInt(); //擷取整數double d = s.nextDouble(); //擷取小數String str = s.next();
>= 大於等於
>>= 右移等於10 >= 2 -> true10 >>= 2 ->i = i >> 2; -> 2
運算子的優先順序~! 算術(++ -- * / % + - ) << >> >>> 關係 邏輯& | ^ 三元 賦值 一元 二元運算(一元的幾個運算子的優先順序是一樣的)
流程式控制制順序結構:指代碼從上到下從左至右來依次編譯啟動並執行
分支結構:
判斷結構if(邏輯值){ 代碼塊}執行順序:先執行邏輯值,如果邏輯值為 true,那麼執行 代碼塊。注意:如果 if 中的代碼塊只有 1 句話,那麼可以省略 {} 不寫if(邏輯值){ Code1;}else{ Code2;}練習:1.輸入三個數字,擷取三個數字中的最小值
import java.util.Scanner;public class IfElseExer {public static void main(String[] args){Scanner s = new Scanner(System.in);int i = s.nextInt();int j = s.nextInt();int k = s.nextInt();/*if(i < j){if(i < k){System.out.println(i);} else {System.out.println(k);}} else {if(j < k){System.out.println(j);} else {System.out.println(k);}}*/int min = i;if(min > j)min = j;if(min > k)min = k;System.out.println(min);}}
2.輸入一個數字表示重量,如果重量<=20,則每千克收費 0.35 元;如果超過 20 千克不超過 100 千克的範圍,則超過的部分按照每千克 0.5 元收費;如果超過 100 千克,則超過的範圍按照每千克 0.8 元收費。
import java.util.Scanner;public class IfElseExer2 {public static void main(String[] args){Scanner s = new Scanner(System.in);double weight = s.nextDouble();double price = 0;if(weight < 0){System.out.println("不合法的重量!!!");} else {if(weight <= 20){price = weight * 0.35;} else {if(weight <= 100){price = 20 * 0.35 + (weight - 20) * 0.5;} else {price = 20 * 0.35 + 80 * 0.5 + (weight - 100) * 0.8;}}}System.out.println(price);}}
或者
import java.util.Scanner;public class IfElseIfDemo {public static void main(String[] args){Scanner s = new Scanner(System.in);double weight = s.nextDouble();double price = 0;if(weight < 0){System.out.println("非法的重量!!!");} else if(weight <= 20){price = weight * 0.35;} else if(weight <= 100){price = 7 + (weight - 20) * 0.5;} else {price = 47 + (weight - 100) * 0.8;}System.out.println(price);}}
if(邏輯值1){ Code1;}else if(邏輯值2){ Code2;}練習:輸入一個數字表示月份,然後輸出這個月份所對應的季節。 3 - 5 -春 6 - 8 - 夏 9 - 11 - 秋 12、1、2 - 冬
import java.util.Scanner;public class IfElseIfExer {public static void main(String[] args){Scanner s = new Scanner(System.in);int month = s.nextInt();if(month < 1 || month > 12){System.out.println("Illegal month !!!");} else if(month > 2 && month < 6){System.out.println("Spring");} else if(month > 5 && month < 9){System.out.println("Summmer");} else if(month > 8 && month < 12){System.out.println("Autumn");} else {System.out.println("Winter");}}}
選擇結構
迴圈結構:
Java 中的運算子和流程式控制制相關內容的理解