ch3 Java 基本運算符號

3-1 運算符號介紹

int i = 3;
int j = 5;
int sum = i + j;

表3-1 常用運算符號

注意 優先序、結合性;優先序1的遞減 為 -- (兩個連續的減號)

使用小括號 ( ) 改變運算優先順序

int sum = 3 + 4 * 5; // sum = 23
int add = ( 3 + 4 ) * 5; // add = 35
int a=1, b=2, c=3;
a = b = c = 4;
// a=?, b=?, c=?

3-2 算數運算符號(Arithmetic Operator)

3-2-1 四則運算符號

參考程式 ArithmeticOP.java

public class E01_ArithmeticOP {
	public static void main(String[] args){
		int a = 5, b = 2;
		double d = 2.0; 
		System.out.printf("a+b=%d\n",a+b);
		System.out.printf("a-b=%d\n",a-b);
		System.out.printf("a*b*d=%f\n",a*b*d);
		System.out.printf("a/b=%d\n",a/b); // 小數點後被捨去
		System.out.printf("a/d=%f\n",a/d);
		System.out.printf("a%%b=%d\n",a%b); // 注意 %%
	}
}

3-2-2 遞增 ++、遞減 -- 符號

參考程式 IncDecrementOP.java

public class E02_IncDecrementOP {
	public static void main(String[] args){
		int a = 1, b = 1;
		System.out.printf("a++=%d\n",a++);
		System.out.printf("--b=%d\n",--b);
		System.out.printf("a=%d\n",a);
		System.out.printf("b=%d\n",b);
		// 先加
		a = 1;
		b = ++a;
		System.out.printf("先加 a=%d, b=%d\n", a, b);
		// 後加
		a = 1;
		b = a++;
		System.out.printf("後加 a=%d, b=%d\n", a, b);
		// 先減
		a = 7;
		b = --a;
		System.out.printf("先減 a=%d, b=%d\n", a, b);
		// 後減
		a = 7;
		b = a--;
		System.out.printf("後減 a=%d, b=%d\n", a, b);
	}
}

3-3 文字串接符號(String Concatenation Operator)

字串 + 字串 ; 字串 + 數字

參考程式 ConcatenateOP.java

public class E03_ConcatenateOP {
	public static void main(String[] args){
		String str1 = "123";
		String str2 = str1 + 10;
		System.out.printf("str2=%s\n",str2);
		int i = 123;
		double d = 3.12;
		System.out.printf("i+d=%f\n",i + d); 
		System.out.printf("i+\" \"+d=%s\n",i + " " + d);
		System.out.println("i = " + i + ", d = " + d);
		System.out.printf("i=%d, d=%f\n", i, d);
		System.out.printf("i=%d, d=%g\n", i, d);
	}
}

3-4 指派運算符號(Assignment Operator)

結合指派,將等號左邊的變數,再放到等號右邊

a += b;
a = a + b;
a -= b;
a = a - b

int a=2, b=3;
a -= b + 4;
// a= ?

參考程式 AssignOP.java

public class E04_AssignOP {
	public static void main(String[] args){
		int a = 1;
		a += 2; // a = a + 2
		String s = "1";
		s += 2; // s = s + 2
		System.out.printf("a=%d\n",a);
		System.out.printf("s=%s\n",s);
	}
}

3-5 比較運算符號(Comparion/Relational Operator)

參考程式 CompareOP.java

public class E05_CompareOP {
	public static void main(String[] args){
		int a = 1, b = 1;
		System.out.printf("a=%d, b=%d\n", a, b);
		System.out.printf("a > b=%b\n",a > b);
		System.out.printf("a >= b=%b\n",a >= b);		
		System.out.printf("a == b=%b\n",a == b); // 注意2個等號
		System.out.printf("a != b=%b\n",a != b);	
		System.out.printf("100 == 11.11/0.1111=%b\n",100 == 11.11/0.1111); // 浮點數有誤差	
	}
}

3-6 邏輯運算符號(Logical Operator)

3-6-1 And 運算符號

3-6-2 Or 運算符號

3-6-3 Xor 運算符號

3-6-4 Not 運算符號

參考程式 AndOP.java

參考程式 OrOP.java

參考程式 XorOP.java

參考程式 NotOP.java

public class E06_LogicOP {
	public static void main(String[] args){
		// And
		int money = 30000; //現金
		int day = 7; //假期天數
		System.out.print("澳洲團成行:");
		System.out.println(money>=40000 && day>=7);
		
		// short-circuit 與 side effect 
		int score = 53, miss=3;
		boolean pass;
		pass = score >= 60 && miss++ < 5; // short-cut
		System.out.printf("&& pass=%b, miss=%d\n", pass, miss);
		
		score=53; miss=3;
		pass = score >= 60 & miss++ < 5;
		System.out.printf("& pass=%b, miss=%d\n", pass, miss);
		

		// Or
		boolean isDiesel = true;
		int cc = 1800; //排氣量
		System.out.print("購買汽車:");
		System.out.println(isDiesel || cc<=1500);

		// Xor
		boolean MassageChair = true; //送按摩椅
		boolean skylight = true; //送天窗
		System.out.print("成交:");
		System.out.println(MassageChair ^ skylight);
		
		// Not
		int age = 16; //年齡
		System.out.print("未滿18歲:");
		System.out.println(!(age>=18));		
	}
}