天天看點

java_Day 02:算術運算符

這裡是引用

算術運算符

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.運算符優先級

關于這節大家不用死記,多敲多練即可。也可以看我後續文章中有更新。