Java-4 運算子
阿新 • • 發佈:2021-09-16
一、運算子:(算術運算子 賦值運算子 關係運算符 邏輯運算子 位運算子 三目運算子)
1.算術運算子
舉例:+號的使用:
1.對於數值就是加號
2.對於字元char來說,在計算之前,char會被提升為int,然後再計算
3.對於字串String(首字母大寫,並不是關鍵字),加號代表字串連線操作,任何資料型別和字串進行連線都會變成字串
二、自增運算,自減運算(只有變數可以使用自增自減運算子,常量不可用)
1、單獨使用,自己獨立成為一個步驟
2、混合使用 ,和其它操作一起,例如與賦值混合,或者與列印操作混合等
使用區別:
1、單獨使用++i,i++沒有什麼區別,兩個完全一樣
2、在混合的時候,有重大區別
A、如果是i++,那麼變數立刻加一,然後拿著結果使用 先加後用
B、如果是++i,那麼先使用變數本來的值,然後再讓變數加一 先用後加
String str1 = "hello" ; String str2 = "world"; System.out.println(str1+str2); System.out.println(str1+1); System.out.println(str1+1+2);//優先順序問題 String+int+int 輸出hello12 //自增自減運算 int i = 10 ; i++;//單獨使用 System.out.println(i); //11 ++i; System.out.println(i); //12 //與列印混合操作時 int j = 11; System.out.println(++j);//12 變數立馬加1列印結果 System.out.println(j);//12 System.out.println(j++);//12 變數先列印結果,再加1 System.out.println(j);//13
2.賦值運算子(= += -= *= /= %=)
1. 基本賦值:=
例子:int a = 1;
錯誤寫法:int = a = b =1;
2.注意事項:
a += 1 ;和 a = a + 1;有什麼區別?
a += 1 並不是轉換成a = a + 1 ;而是轉換成 a = (a的資料型別)(a + 1)
3.關係運算符
注意事項:
1.關係運算符結果都是Boolean型,也就是要麼是true,要麼是false
2.如果進行多次比較不能連著寫,可以使用邏輯運算子拆開寫
3.常量也可以比較
4.邏輯運算子
public class LogicDemo { public static void main(String[] args) { int a = 2 ; int b = 3 ; int c = 4 ; //&邏輯運算 System.out.println( a & b );則變成了位運算中的與運算 System.out.println(a > b & a < c );//false System.out.println(a > b & a > c );//false System.out.println(a < b & a < c );//true System.out.println(a < b & a > c );//false //|邏輯或運算 System.out.println(a > b | a < c );//true System.out.println(a > b | a > c );//false System.out.println(a < b | a < c );//true System.out.println(a < b | a > c );//true //^異或運算 System.out.println(a > b ^ a < c );//true System.out.println(a > b ^ a > c );//false System.out.println(a < b ^ a < c );//false System.out.println(a < b ^ a > c );//true } }
4.1 結論:
邏輯與&:有false則false 邏輯或|:有true則true 邏輯異或^: 相同為false,不同為true
4.2 注意事項:
1.邏輯運算子用於連線布林型表示式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。
2.“&”和“&&”的區別: 單&時,左邊無論真假,右邊都進行運算; 雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那麼右邊不參與運算。
3.“|”和“||”的區別同理,雙或時,左邊為真,右邊不參與運算。 異或( ^ )與或( | )的不同之處是:當左右都為true時,結果為false。
int x = 3; int y = 4; // boolean b1 = ((x++==3) & (y++==4)); // System.out.println(b1); //true // System.out.println("x: "+x); // System.out.println("y: "+y); // System.out.println("--------------------------"); // boolean b2 = ((x++==5) && (y++==4)); // System.out.println(b2); //true // System.out.println("x: "+x); // System.out.println("y: "+y); // boolean b2 = ((x++==3) | (y++==4)); // System.out.println(b2); //true // System.out.println("x: "+x); //4 // System.out.println("y: "+y); //5 boolean b2 = ((x++==3) || (y++==6)); System.out.println(b2); //true System.out.println("x: "+x); //4 System.out.println("y: "+y); //4
5.位運算子
public class OptPositionDemo1 { public static void main(String[] args) { int x = 3; int y = 4; System.out.println(x&y); //0 System.out.println(x|y); //7 System.out.println(x^y); //7 System.out.println(~x); //-4 } } /* 分析: 要先得到二進位制 計算機中資料參與運算的都是補碼 3的二進位制:11 4的二進位制:100 3的原碼、反碼、補碼:00000000 00000000 00000000 00000011 4的原碼、反碼、補碼:00000000 00000000 00000000 00000100 &位與運算:有0則0 00000000 00000000 00000000 00000011 & 00000000 00000000 00000000 00000100 ----------------------------------------- 00000000 00000000 00000000 00000000 結果是0 |位或運算:有1則1 00000000 00000000 00000000 00000011 | 00000000 00000000 00000000 00000100 ------------------------------------------ 00000000 00000000 00000000 00000111 結果是7 ^位異或運算:相同則0,不同則1 00000000 00000000 00000000 00000011 ^ 00000000 00000000 00000000 00000100 ------------------------------------------ 00000000 00000000 00000000 00000111 結果是7 ~位取反:0變成1,1變成0 00000000 00000000 00000000 00000011 -------------------------------------- ~ 11111111 11111111 11111111 11111100 補碼求原碼: 符號位 數值位 補碼: 1 1111111 11111111 11111111 11111100 反碼: 1 1111111 11111111 11111111 11111011 原碼: 1 0000000 00000000 00000000 00000100 結果是-4 */
/* 位運算: >>,>>>,<< <<:左移:向左移動,最高位丟棄,右邊補0 >>:右移:向右移動,最高位是0,左邊補0,最高位是1,左邊補1 >>>:無符號右移:向右移動,無論最高位是0還是1,右邊都用0補齊 */ public class OptPositionDemo2 { public static void main(String[] args) { System.out.println(3 << 2); System.out.println(24 >> 2); System.out.println(24 >>> 2); System.out.println(-24>>2); System.out.println(-24>>>2); } } /* 分析: 想要參與位運算,就必須得先知道二進位制 1、計算出3的二進位制:11 3的二進位制補碼: 00000000 00000000 00000000 00000011 (00)000000 00000000 00000000 0000001100 結果是:12 2、計算出24的二進位制:11000 24的二進位制的補碼: 00000000 00000000 00000000 00011000 0000000000 00000000 00000000 000110(00) 結果是:6 3、計算出24的二進位制:11000 24的二進位制的補碼: 00000000 00000000 00000000 00011000 0000000000 00000000 00000000 000110(00) 結果是:6 4、計算出-24的二進位制:11000 原碼: 10000000 00000000 00000000 00011000 反碼: 11111111 11111111 11111111 11100111 補碼: 11111111 11111111 11111111 11101000 -24的補碼: 11111111 11111111 11111111 11101000 11111111 11111111 11111111 11111010(00) 補碼:11111111 11111111 11111111 11111010 反碼:11111111 11111111 11111111 11111001 原碼:10000000 00000000 00000000 00000110 結果是:-6 5、 計算出-24的二進位制:11000 原碼: 10000000 00000000 00000000 00011000 反碼: 11111111 11111111 11111111 11100111 補碼: 11111111 11111111 11111111 11101000 //右移 -24的補碼: 11111111 11111111 11111111 11101000 0011111111 11111111 11111111 111010(00) //無符號右移 結果是:1073741818 */
6.三目運算子
1.一元運算子:只需要一個數據就可以進行操作的運算子。 例如;取反!、自增++、自減--
2.二元運算子:需要兩個資料才可以操作的運算子。 例:加法+、賦值=
3.三元運算子:需要三個資料才可以進行操作的運算子
格式
資料型別 變數名稱 = 條件判斷 ?表示式A :表示式B;
流程:
如果條件判斷成立,將表示式A的值賦值給左側變數
如果不成立,將表示式B的值賦值給左側變數
注意事項:
1.必須同時保證表示式A和表示式B都符合左側資料型別的要求
2.三元運算子的結果必須被使用
public class Perator1 { public static void main(String[] args) { int a = 10 ; a += 10 ; System.out.println(a);//20 //三元運算子 int b = 20 ; int c = 30 ; int max = b > c ? b : c ; System.out.println("最大值"+max); //正確寫法 System.out.println(b > c ? b : c ); //正確寫法 //int result = 3 > 4 ? 2.5 : 3; //錯誤寫法 必須同時保證表示式A和表示式B都符合左側資料型別的要求 } }