06.基礎運算子
阿新 • • 發佈:2021-10-14
運算子介紹
- 算術運算子
- 賦值運算子
- 擴充套件運算子
- 關係運算符
- 邏輯運算子
- 位運算子
- 條件運算子
- 字串連線符
運算子分類
算術運算子
+、-、*、/、%(%指的是取餘數):加減乘除取餘這幾個操作符屬於二元運算子。
二元運算子指的是需要兩個運算元才能完成運算的運算子。
其中的 % 是取模運算子,即求餘數
二元運算子的運算規則:
整數運算
- 如果兩個運算元有一個為 Long 型別,則結果也為 long
- 沒有 long 時,結果為 int 。即使運算元全為 short,byte,結果也是 int。
浮點運算
- 如果兩個運算元有一個為 double,則結果為 double
- 兩個運算元都為 float,則結果才為 float
// 測試算術運算子 public class testOperator01 { public static void main(String[] args) { byte a = 1; int b = 2; long b2 = 3; // 報錯,c 為 int 型別。因為無論short,byte,都預設是 int,所以不能放在 byte 中。沒有 long 時,結果為 int byte c = a + b; // 報錯 // c2 為 long 型別。因為當運算元中有一個為 long 時,結果也為 long 型別, long 型別不能放在 int 中 int c2 = b2 + a; // 報錯 // 表數範圍較大的時候,會自動轉換型別,不會報錯 float f1 = 3.14F; // double 和 float 的表數範圍比 int、byte、long 要大,所以不會報錯。 double d = b + b2; // 正確 float d1 = b + b2; // 正確 // 6.2 是 double 型別,所以結果 d2 也是 double 型別,其無法放進 float 中 float d2 = f1 + 6.2; // 報錯 } }
取模運算
- 運算元可以為浮點數,一般使用整數,結果為“餘數”
- “餘數”符號和左邊運算元一樣。如7%2=1,-7%2=-1,7%-2==1
// 運算結果“餘數”的符號和左邊運算元一樣。
System.out.println(-9%4); // 結果為 -1
System.out.println(9%-4); // 結果為 1
System.out.println(9%4); // 結果為 1
System.out.println(-9%-4); // 結果為 -1
運算子:自增 ++、自減 --
算術運算子中 ++、-- 屬於一元運算子,該類運算子只需要一個運算元。
測試自增 ++、自減 -- 算術運算子
public class testOperator01 {
public static void main(String[] args) {
// 測試自增:++
int a = 3;
int b = a++; // 先給 b 賦值,然後 a 再自增,主要看 ++ 放置的位置
int c = ++a; // a 先自增,再複製給 c ,主要看 ++ 放置的位置
System.out.println("a="+a+"\nb="+b+"\nc="+c); // 測試結果為 a=4,b=3,c=5
// 測試自減:--
int a1 = 3;
int b1 = a1--; // 先給 b1 賦值,然後 a1 再自減,主要看 -- 放置的位置
int c1 = --a1; // a1 先自減,再複製給 c1 ,主要看 -- 放置的位置
System.out.println("a1="+a1+"\nb1="+b1+"\nc1="+c1); // 測試結果為 a1=1,b1=3,c1=1
}
}
賦值運算子
賦值運算子及其擴充套件運算子
含義如圖所示:
程式碼示例:賦值運算子及其擴充套件運算子
// 賦值運算子及其擴充套件運算子運算示例
public class testOperator01 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
a += b; //相當於 a = a + b
System.out.println("a="+a+"\nb="+b); // 結果為 a = 7,b = 4
b *= c;
System.out.println("b="+b+"\nc="+c); // 結果為 b = 20,c = 5
}
}
關係運算符
- 關係運算符用於做比較運算
- 關係運算符的結果為布林值:true / false
關係運算符
注意點
- = 是賦值運算子,而真正判斷兩個運算元是否相等的運算子是 ==
- == 、!= 是所有(基本和引用)資料型別都可以使用
- > 、>= 、< 、<= 僅針對資料型別(byte/short/int/long,float/double 以及 char)
// 測試關係運算符
public class TestOperator02 {
public static void main(String[] args) {
// 測試基本關係運算符
int c = 3;
System.out.println(c==3); // true
System.out.println(c!=3); // false
System.out.println(c>=3); // true
System.out.println(c>3); // false
// 比較 char 資料型別
// char
char a = 'a';
char b = 'b';
// char 型別在做比較時,會轉化成 數字 進行計算
System.out.println(a==b); // false
System.out.println(a>=b); // false
System.out.println(a<=b); // true
// 輸出結果為字元 a,只有在比較時才會轉化成數字進行比較
System.out.println(a); // 輸出結果為字元 a
// 可以通過強轉,將字元 轉為 數字
System.out.println((int)a); // 97
System.out.println(0+a); // 97
System.out.println((int)b); // 98
System.out.println(0+b); // 98
}
}
邏輯運算子
邏輯運算子圖表
邏輯異或 ^ :相同為 false,不同為 true
短路與、短路或
短路與 &&:只要有一個為 false,則直接返回 false
短路或 ||:只要有一個為 true,則直接返回 true
public class TestOperator03 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
System.out.println(b1&b2); // false
System.out.println(b1|b2); // true
System.out.println(b1^b2); // true
System.out.println(!b2); // true
// 測試短路與、短路或
boolean b3 = 1>2 && 2<(3/1); // 短語與:第一個運算元為 false,則整個邏輯表示式值為 false
boolean b4 = 1>2 || 2<(3/1); // 短路或:有一個為 true,則整個邏輯表示式值為 true
System.out.println(b3); // false
System.out.println(b4); // true
}
}
注意點
- 短路與 和 短路或 採用短路的方式,從左往右計算。
- 如果通過運算子左邊的運算元能夠確定該邏輯表示式的值,則不會繼續計算運算子右邊的運算元,直接輸出對應值,以此提高效率。
位運算子
位運算子指的是進行二進位制位的運算
常用的位運算子
運算元演示
位運算程式碼演示
public class TestOperator04 {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a&b); // 0
System.out.println(a|b); // 7
System.out.println(a^b); // 7
System.out.println(~a); // -4
// 移位運算
int c = 3<<2; // 結果為12 。c = 3 * 2 * 2
int d = 3<<4; // 結果為48 。d = 3 * 4 * 4
int e = 12>>2; // 結果為3 。e = 12 / (2*2)
int f = 3>>4; // 結果為0 。f = 3 / (2*2)
System.out.println(c); // 12
System.out.println(d); // 48
System.out.println(e); // 3
System.out.println(f); // 0
System.out.println(3/4); //結果為0,取整運算。有 0 個 4,所以結果為 0
System.out.println(3%4); //結果為3,取餘運算。餘數為 3,所以結果為 3
}
}
注意點:
- 按位或:有 1 為真,全 0 為假
- 按位異或:不同為真,相同為假
- ~ 取反運算是單目運算,用來求一個位串資訊按位的反,只能對一個數進行操作(對轉換後的二進位制數進行取反:0 <轉> 1)
字串連線符
注意點
- "+" 運算子兩側的運算元中只要有一個是字串(String)型別,系統會自動將另一個運算元轉換為字串進行連線。
- "+" 運算子如果兩側的運算元全為數字時,則進行數字之間的計算。
- "+" 運算子進行運算時,如果字元型資料遇到數字,會將自身轉換為相應的數字進行“加”運算
public class TestOperator05 {
public static void main(String[] args) {
String a = "3";
int b = 4;
int c = 5;
char d = 'a'; // 字元型資料
System.out.println(a+b+c);// 結果為 345,先 a + b 進行字串拼接,隨後再 + c 進行字串拼接
System.out.println(b+c+a);// 結果為 93,先是 b + c 數字運算,再與 a 進行字串拼接
System.out.println(d); // 結果為 a,
System.out.println(b+c+d);// 結果為 106。字元型資料 和 數字進行 “+” 運算時,字元型資料會變成對應的數字進行運算
}
}
條件運算子
語法格式
// x 為 boolean 型別表示式,先計算 x 的值,若為 true,則整個運算子的結果為表示式 y 的值,反之運算子結果為表示式 z 的值
x ? y : z
程式碼示例
// 測試條件運算子
public class TestOperator06 {
public static void main(String[] args) {
int score = 80;
int x = -100;
String type = score < 60?"不及格":"及格";
System.out.println(type); // 結果為 及格
// 測試條件運算子套用
System.out.println(x > 0?1:(x == 0?0:-1)); // 結果為 -1
}
}
運算子優先順序
注意點
- 常用運算子優先順序:邏輯非 > 邏輯與 > 邏輯或
- a || b && c 的運算結果為: a || (b && c) 而不是 (a || b)&& c 。結果由運算子優先順序產生。
- 表示式中優先使用小括號來組織區分。
運算子知識內容自此結束。
偷偷向銀河要了一把碎星✨只等你閉上眼睛撒入你的夢中。