Java 中的算術運算符主要用來組織數值類型數據的算術運算,按照參加運算的操作數的不同可以分爲一元運算符和二元運算符。
一元運算符
一元運算一共有 3 個:
運 算符 | 名 稱 | 說 明 | 例 子 |
---|---|---|---|
- | 取反符號 | 取反運算 | b=-a |
++ | 自加一 | 先取值再加一,或先加一再取值 | a++ 或 ++a |
-- | 自減一 | 先取值再減一,或先減一再取值 | a-- 或 --a |
例子說明:
- -a 是對 a 取反運算
- a++ 或 a-- 是在表達式運算完後,再給 a 加一或減一
- ++a 或 --a 是先給 a 加一或減一,然後再進行表達式運算
代碼:
int a = 12;
System.out.println(-a);
int b = a++;
System.out.println(b);
b = ++a;
System.out.println(b);
代碼解釋:
第 2 行是 -a,是把 a 變量取反,結果輸出是 -12。
第 4 行代碼是先把 a 賦值給 b 變量,a再加一,即先賦值後 ++,因此輸出結果是 12,而a此時因爲+1了所以值爲13。
第 6 行代碼是把 a 加一,然後把 a 賦值給 b 變量,即先 ++ 後賦值,因此輸出結果是 14。
運行結果:
二元運算符
算術運算符的功能是進行算術運算,除了經常使用的加(+)、減(-)、乘(*)和除(\)外,還有取模運算(%)。
加(+)、減(-)、乘(*)、除(\)和我們平常接觸的數學運算具有相同的含義。
運 算 符 | 名 稱 | 說 明 | 例 子 |
---|---|---|---|
+ | 加 | 求 a 加 b 的和,還可用於 String 類型,進行字符串連接操作 | a + b |
- | 減 | 求 a 減 b 的差 | a - b |
* | 乘 | 求 a 乘以 b 的積 | a * b |
/ | 除 | 求 a 除以 b 的商 | a / b |
% | 取餘 | 求 a 除以 b 的餘數 | a % b |
二元算術運算符都是雙目運算符,即連接兩個操作數的運算符。
優先級上,*、/、% 具有相同運算級別,並高於 +、-(+、- 具有相同級別)。
代碼展示:
int a = 4, b = 2, c = 3;
int d = a * (b + c) % c;
運算規則與數學運算中的規則是相同的。
首先計算賦值符號(=)右邊配對的括號內的值,其次按從左向右的結合方向計算乘法,最後做求餘運算,表達式的結果爲 2, 然後把 2 賦值給 d。
舉例:
-
int x=2,y=1;
表達式 y/x 的結果是 0。(int是整數,去掉小數部分) -
float x=2.0f; int y=1;
表達式 y/x 的結果是 0.5。
在(1)中整型變量 x 和 y 相除,其結果仍爲整型數據 0;在(2)中由於兩個不同類型的數據進行運算,此時首先要進行類型轉換,會把 int 型的 y 轉換成與 x 一樣的 float 型,然後相除,最終結果爲 float 類型的數字 0.5。
代碼練習
編寫一個程序,輸出不同類型的兩個數,執行相加、相減、相乘、相除和求餘後輸入結果。
public static void main(String[] args) {
float f1 = 9 % 4;// 保存取餘後浮點類型的結果
double da = 9 + 4.5; // 雙精度加法
double db = 9 - 3.0; // 雙精度減法
double dc = 9 * 2.5; // 雙精度乘法
double dd = 9 / 3.0; // 雙精度除法
double de = 9 % 4; // 雙精度取餘
System.out.println("整數的算術運算"); // 整數的加、減、乘、除和取餘
System.out.printf("9+4=%d \n", 9 + 4);
System.out.printf("9-4=%d \n", 9 - 4);
System.out.printf("9*4=%d \n", 9 * 4);
System.out.printf("9/4=%d \n", 9 / 4);
System.out.printf("9%%4=%d \n", 9 % 4);
System.out.println("\n浮點數的算術運算"); // 浮點數的加、減、乘、除和取餘
System.out.printf("9+4.5f=%f \n", 9 + 4.5f);
System.out.printf("9-3.0f=%f \n", 9 - 3.0f);
System.out.printf("9*2.5f=%f \n", 9 * 2.5f);
System.out.printf("9/3.0f=%f \n", 9 / 3.0f);
System.out.printf("9%%4=%f \n", f1);
System.out.println("\n雙精度數的算術運算"); // 雙精度數的加、減、乘、除和取餘
System.out.printf("9+4.5=%4.16f \n", da);
System.out.printf("9-3.0=%4.16f \n", db);
System.out.printf("9*2.5=%4.16f \n", dc);
System.out.printf("9/3.0=%4.16f \n", dd);
System.out.printf("9%%4=%4.16f \n", de);
System.out.println("\n字符的算術運算"); // 對字符的加法和減法
System.out.printf("'A'+32=%d \n", 'A' + 32);
System.out.printf("'A'+32=%c \n", 'A' + 32);
System.out.printf("'a'-'B'=%d \n", 'a' - 'B');
}
執行結果:
整數的算術運算
9+4=13
9-4=5
9*4=36
9/4=2
9%4=1
浮點數的算術運算
9+4.5f=13.500000
9-3.0f=6.000000
9*2.5f=22.500000
9/3.0f=3.000000
9%4=1.000000
雙精度數的算術運算
9+4.5=13.5000000000000000
9-3.0=6.0000000000000000
9*2.5=22.5000000000000000
9/3.0=3.0000000000000000
9%4=1.0000000000000000
字符的算術運算
'A'+32=97
'A'+32=a
'a'-'B'=31
代碼中使用了 4 種類型來執行算術運算。
整數類型的結果最容易理解,浮點型和雙精度型返回的結果都帶有小數,
字符型將會把字符轉換爲 ASCII 碼再運算。
從輸出結果中可以看到,整數之間的運算結果只保留整數部分,浮點型運算時保留 6 位小數部分,雙精度運算時則保留 16 位小數部分。
注意:Java 語言算術運算符的優先級是先乘除後加減。例如在表達式“a-bc”中,b 的左側爲減號,右側爲乘號,而乘號優先級高於減號,因此該表達式可以轉換爲“a-(bc)”
如果在一個表達式中的多個算術運算符的優先級別相同,例如“a-b+c”,此時將按照運算符的結合方向決定順序。算術運算符的結合方向都是“從左至右”,即先左後右。因此 b 先與減號結合,執行“a-b”的運算,再執行加 c 的運算。
算術賦值運算符
算術賦值運算符只是一種簡寫,一般用於變量自身的變化,
運 算 符 | 名 稱 | 例 子 |
---|---|---|
+= | 加賦值 | a += b、a += b+3 |
-= | 減賦值 | a -= b |
*= | 乘賦值 | a *= b |
/= | 除賦值 | a /= b |
%= | 取餘賦值 | a %= b |
代碼示例:
int a = 1;
int b = 2;
a += b; // 相當於 a = a + b
System.out.println(a);
a += b + 3; // 相當於 a = a + b + 3
System.out.println(a);
a -= b; // 相當於 a = a - b
System.out.println(a);
a *= b; // 相當於 a=a*b
System.out.println(a);
a /= b; // 相當於 a=a/b
System.out.println(a);
a %= b; // 相當於 a=a%b
System.out.println(a);
運行結果: