這裡是引用
算術運算符
1一進制運算符(隻需要一個操作數)
1.1 自加運算
i++:表示:先運算後指派
++i:表示:先指派後運算
例如:
int i = 5;
sum = i++;//先計算,後指派
System.out.println(sum+" "+i)//輸出5 6
int i = 5;
sum = ++i;//先指派,後計算
System.out.println(sum+" "+i)//輸出6 6
1.2 自減運算
i–:表示:先運算後指派
–i:表示:先指派後運算
例如:
int i = 5;
sum = i--;//先計算,後指派
System.out.println(sum+" "+i)//輸出5 4
int i = 5;
sum = --i;//先指派,後計算
System.out.println(sum+" "+i)//輸出4 4
**一進制運算符:**
!邏輯非(取反)
!運算特點:
!true = false;
!false = true;
2二進制運算符(需要二個操作數)
** + - * / % **
加法運算:
*
* + **
減法運算:** - **
乘法法運算:** * **
除法運算:** /**
模運算(取餘運算):** % **
例如:
int i = 5,j = 4
sum = i + j;
System.out.println(sum)//輸出9
sum = i - j;
System.out.println(sum)//輸出1
sum = i * j;
System.out.println(sum)//輸出20
sum = i / j;
System.out.println(sum)//輸出1 5對4取商
sum = i % j;
System.out.println(sum)//輸出1 5對4取餘
** 随堂練習:**
要求:
1)擷取整數987的百位數、十位數和個位數。
//求一個數的個,十,百,三位數
int num = 699;
int ge,shi,bai;
ge = num % 10;
shi = num/10%10;
bai = num/100;
System.out.println(ge+" "+shi+" "+bai);//輸出9 9 6
2)判斷一個數是奇數還是偶數;
//判斷奇偶
System.out.print("請輸入一個數:");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
if(num == 0)
{
System.out.println("既不是奇數也不是偶數");
}
else if(num % 2 == 0)
{
System.out.println("偶數");
}
else
{
System.out.println("奇數");
}
3)int a = 3, b = 4; 求a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b的值。
//計算過程:
/*
a:3
b:5
sum:3/3+3*2-4%6+3*3-5=1+6-4+9-5=7
*/
int a = 3, b = 4,sum;
sum=a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b;
System.out.println("a:"+a+"b:"+b+"sum:"+sum);//輸出a:3 b:5 sum:7
3 指派運算
3.1 = 把等号右邊的值指派給左邊
** 随堂練習 **
要求:
交換兩個數的值,三種方法。
public class OperatorDemo02{
public static void main(String[] args){
int num1 = 3,num2 = 5;
/*
//方法一:
//優點:很好了解
//缺點:需要開辟記憶體空間
int temp;
temp = num1;
num1 = num2;
num2 = temp;
*/
/*
//方法二:
//優點:不需要開辟記憶體空間
//缺點:難了解
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
*/
/**/
//方法三:
//優點:效率高(二進制在計算)
//缺點:極難了解
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println(num1+" "+num2);
}
}
經典面試題
int num = 5;
num = num++;
System.out.println(num);//輸出結果為5
3.2 擴充指派運算符
num += m ===> num = (num左邊的資料類型)(num + (m));
num -= m ===> num = (num左邊的資料類型)(num - (m));
num *= m ===> num = (num左邊的資料類型)(num * (m));
num /= m ===> num = (num左邊的資料類型)(num / (m));
num %= m ===> num = (num左邊的資料類型)(num % (m));
經典面試題:
1、 short num = 11; num = num + 1; 和short num = 11; num += 1;哪一個正确呢?
答:short num = 11; num += 1;正确;
原因:num = num + 1 是整形int與short相加變為int型,而傳回結果是short,是以不符合
2、 int sum += 30; 請問這行語句文法是否正确???
答:不符合,因為sum未指派
例題:
輸入三個學生成績并求平均值(由于擔心有的人沒學過數組,循環結構,在此用最笨的法子寫,謝謝支援)
不知道Scanner從鍵盤輸入可以去看我的另一篇文章
import java.util.Scanner;
public class OperatorDemo03{
public static void main(String[] args){
double sum = 0;
Scanner input = new Scanner(System.in);
System.out.println("請輸入第一個學生成績");
sum += input.nextDouble();
System.out.println("請輸入第二個學生成績");
sum += input.nextDouble();
System.out.println("請輸入第三個學生成績");
sum += input.nextDouble();
System.out.println("平均成績:"+ sum / 3);
}
}
4.關系運算符(傳回的隻能是boolean類型)
關系運算符用來進行比較運算,關系運算符的運算結果是boolean類型。
>、<、>=、<=、==、!=
由于過于簡單,就不啰嗦了
例題;
1. 定義三個數,然後對這三個數做升序排序。(還是一樣,這裡隻為讓大家看得更清晰)
public class OperatorDemo04{
public static void main(String[] args){
int num1 = 4, num2 = 3,num3 = 5;
if(num1 > num2)
{
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
}
if(num2 > num3)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
if(num1 > num2)
{
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
}
System.out.println("升序排列為:"+num1+" "+num2+" "+num3);//輸出 3 4 5
}
5.邏輯運算符
5.1 & 與
&運算特點:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
&與運算:
隻有兩邊都為true,結果才為true
否則為false
5.2 | 或
|運算特點:
true | true = true;
true | false = true;
false | true = true;
false | false = false;
|或運算:
隻有兩邊都為false,結果才為false
否則為true
5.3 && 邏輯與運算, || 邏輯或
&&邏輯與(短路與):
隻有兩邊都為true,結果才為true
隻要左側為false,則右邊表達式不執行,直接傳回false
||邏輯或(短路或):
隻有兩邊都為false,結果才為false
隻要左側為true,則右邊表達式不執行,直接傳回true
5.4 ^ 邏輯異或
^運算特點:
true ^ true = false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
^運算規律:
運算兩邊相同,那麼結果肯定為false
運算兩邊不同,那麼結果肯定為true
5.5 ! 邏輯非
!運算特點:
!true = false;
!false = true;
左移運算:<<
也就是(<<n)乘以2的n次方。
右移運算:>>
也就是(>>n)除以2的n次方。
無符号右移:<<<
與右移相似,但是無論值正負,最高位永遠補零
例題:
1)判斷一個數是否在4(不包含)~6(包含)之外;
import java.util.Scanner;
public class OperatorDemo05{
public static void main(String[] args){
//2、判斷一個數是否在4(不包含)~6(包含)之外;
Scanner input = new Scanner(System.in);
System.out.println("請輸入一個數:");
int num = input.nextInt();
if(num > 4 && num <= 6)
{
System.out.println("在");
}
else
{
System.out.println("不在");
}
}
}
2)判斷true還是false
/*
int num = 10;
System.out.println(false && (num=5)>3);//false,短路與
System.out.println(num);//10
*/
注意:& 與 &&,| 和 || 差別
&&和&的運算結果是一樣的,但是運算的過程有所不同
&:無論左邊的運算結果是什麼,右邊都需要參與運算
&&:如果左邊運算結果為false,那麼右邊就不需要參與運算了,直接傳回結果false
如果左邊運算結果為true,那麼需要進行右邊的運算,并傳回右邊運算的結果
||和|的運算結果是一樣的,但是運算的過程有所不同
|:無論左邊的運算結果是什麼,右邊都需要參與運算
||:如果左邊運算結果為true,那麼右邊就不需要參與運算了,直接傳回結果true
如果左邊運算結果為false,那麼需要進行右邊的運算,并傳回右邊運算的結果
6. 位運算(二進制計算)
位運算是直接對二進制進行的運算。(大家可以看我後續的文章),這個小節就不做過多解釋
6.1 &位運算
位都為1,結果才為1,否則結果為0
例如:7 & 3 = 3
111
&011
------
011
6.2 |位運算
位隻要有一個為1,那麼結果就是1,否則就為0
例如:7 | 3 = 7
111
|011
------
111
6.3 ^ 位運算
兩個操作數的位中,相同則結果為0,不同則結果為1
例如:7 ^ 3 = 4
111
^011
------
100
6.4 ~位運算
如果位為0,結果是1,如果位為1,結果是0
例如:~6 = -7
0000 0000 0000 0000 0000 0000 0000 0110
取反 1111 1111 1111 1111 1111 1111 1111 1001
7.三元運算符
三元運算符又稱為三目運算。
文法格式:條件表達式? 表達式1 : 表達式2
如果條件表達式為true,則取表達式1的值,否則就取表達式2的值。
【随堂練習】
1、擷取兩個數的最大值或最小值
int a = 5, b = 8,max;
max=a>b?a:b//傳回結果 8
8.運算符優先級
關于這節大家不用死記,多敲多練即可。也可以看我後續文章中有更新。