Presentation is loading. Please wait.

Presentation is loading. Please wait.

第五章 運算關係式(Expression).

Similar presentations


Presentation on theme: "第五章 運算關係式(Expression)."— Presentation transcript:

1 第五章 運算關係式(Expression)

2 5-1 簡介 電腦系統對我們人類之意義,可廣義歸納為:資料儲存(Store)、資料運算(Calculation)、與資料傳輸(Transmission)。可見運算是電腦系統之一個重要環節,本章將就Java之狹義運算式(Expressions) 作詳細探討。 於離散數學曾定義:設有元素值a與b,若兩者之間存在某種關係元R,即可以關係式 “aRb” 表示之。我們熟悉的關係元如:“等於(=)”、“大於(>)”、“因此(→)”、“加(+)”、“乘(×)” 等均屬之。 Java程式中之大部份敘述式(Statements),都是由運算關係式(Expressions) 所組成。運算關係式(Expressions) 包括 “運算值(Operands)” 與 “運算元(Operators)”,如2+3,運算值為2與3,運算元為+。

3 5-2 指定運算元(Assignment Operators)
指定運算元以等號 “=” 表示之,等號之左端為變數(Variable),右端為指定值(Assign Value)。系統將右端之指定值給予左端之變數,指定值可以是一個數值、可以是一個變數、亦可以是一個運算式。

4 範例25: 指定運算元之應用。 01 class Ex05_2 {
01 class Ex05_2 { public static void main (String[] argv) { int a, b, c, d; a = 15; b = 'A'; System.out.println("數值 a = "+a); System.out.println("字元值 b = "+b); c = b; System.out.println("變數值 c = "+c); d = a + b; System.out.println("運算式值 d = "+d); } 13 }

5 5-3 算術運算元(Arithmetic Operators)
算術運算元包括:加、減、乘、除、餘數,分別以+、-、*、/、% 表示之,其運算值之資料型態必需為 { byte, int, short, long, float, double},否則無法計算,有關資料型態之轉換,將於爾後再詳述。

6 範例26: 算術運算元之應用。 01 class Ex05_3_1 {
public static void main (String[] argv) { int a = 15, b = 2, c; c = a + b; System.out.println(“加法值 c = ”+c); c = a - b; System.out.println(“減法值 c = ”+c); c = a * b; System.out.println(“乘法值 c = ”+c); c = a / b; System.out.println(“除法值 c = ”+c); c = a % b; System.out.println("餘數值 c = "+c); } 15 }

7 範例27: 算術運算元與複合等號之應用。 01 class Ex05_3_2 {
01 class Ex05_3_2 { public static void main (String[] argv) { int a, b = 2; a = 15; a += b; System.out.println("加法值 a = "+a); a = 15; a -= b; System.out.println("減法值 a = "+a);

8 範例27:續 10 a = 15; 11 a *= b; 12 System.out.println("乘法值 a = "+a);
a = 15; a /= b; System.out.println("除法值 a = "+a); a = 15; a %= b; System.out.println("除法值 a = "+a); } 20 }

9 5-4 遞增/遞減運算元 (Increment/Decrement Operators)
一般來言,遞增/遞減運算元(Increment/Decrement Operator) 用於迴圈(Loop),每迴圈一次,變數值加1、或減1。表示方式可分兩類:前置式(Prefix) 如++a、--a,與後置式(Postfix) 如a++、a--。

10 範例28遞增/遞減運算元之應用。 01 class Ex05_4 {
public static void main (String[] argv) { int a; a = 10; System.out.println("前置遞增 a = "+ ++a); a = 10; System.out.println("後置遞增 a = "+ a++); a = 10; System.out.println("前置遞減 a = "+ --a); a = 10; System.out.println("後置遞減 a = "+ a--); } 13 }

11 5-5 比較運算元(Compare Operators)
比較運算元(Compare Operators) 用於測試兩個運算值(Operands) 的大小關係,並回傳一個布林值(Boolean Value)。 常用的比較運算元(Compare Operators) 有:相等(= =)、不相等(! =)、大於(>)、小於(<)、大於等於(> =)、小於等於(< =)。

12 範例29: 比較運算元之應用。 01 class Ex05_5 {
01 class Ex05_5 { public static void main (String[] argv) { int a = 3, b = 2; System.out.println("測試 (a == b) = "+ (a==b)); System.out.println("測試 (a != b) = "+ (a!=b)); System.out.println("測試 (a > b) = "+ (a>b)); System.out.println("測試 (a < b) = "+ (a<b)); System.out.println("測試 (a >= b) = "+ (a>=b)); System.out.println("測試 (a <= b) = "+ (a<=b)); } 11 }

13 5-6 邏輯運算元(Logical Operators)

14 範例30: 邏輯運算元之應用。 01 class Ex05_6_1 {
02 public static void main (String[] argv) { System.out.println("測試 (false & true) = "+ (false & true)); System.out.println("測試 (true | false) = "+ (true | false)); System.out.println("測試 (!true) = "+ (! true)); } 07 }

15 範例31: 短路(Short Circuit) 邏輯運算元之應用。
01 class Ex05_6_2 { 02 public static void main (String[] argv) { int a; a = 3; System.out.println("測試 (true && (++a > 0)) = "+ (true && (++a > 0))); System.out.println(“測試是否有執行 ++a: ”+ a); a = 3; System.out.println("測試 (false && (++a > 0)) = "+ (false && (++a > 0))); System.out.println(“測試是否有執行 ++a: ”+ a); a = 3; System.out.println("測試 (true || (++a > 0)) = "+ (true || (++a > 0))); System.out.println(“測試是否有執行 ++a: ”+ a); a = 3; System.out.println("測試 (false || (++a > 0)) = "+ (false || (++a > 0))); System.out.println("測試是否有執行 ++a: "+ a); } 17 }

16 5-7 位元運算元(Bitwise Operators)
數值以2進位表示時,每一個位置之0或1佔用一個位元(Bit),執行如此形態之運算元是謂 “位元運算元(Bitwise Operators)”。常用的位元運算元有 “補數運算元(Complement Bitwise Operators)”、“位移運算元(Shift Bitwise Operators)”、與 “位元邏輯運算元(Logical Bitwise Operators)”。

17 範例34: 補數運算元之應用。 01 class Ex05_7_1 {
public static void main (String[] argv) { int a, b; a = 3; System.out.println("執行前之 a值: "+ a); a = ~a; System.out.println(“1的補數執行後之 a值: ”+ a); a = -3; System.out.println("執行前之 a值: "+ a); a = ~a; System.out.println(“1的補數執行後之 a值: ”+ a); b = 3; System.out.println("執行前之 b值: "+ b); b = ~b+1; System.out.println(“2的補數執行後之 b值: ”+ b); b = -3; System.out.println("執行前之 b值: "+ b); b = ~b+1; System.out.println("2的補數執行後之 b值: "+ b); } 21 }

18 範例41: 位移運算元之應用。 01 class Ex05_7_2_1 {
01 class Ex05_7_2_1 { public static void main (String[] argv) { int a, b; a = 4; b = a>>1; System.out.println("正數測試右移運算元 >>: "+ b); a = -4; b = a>>1; System.out.println("負數測試右移運算元 >>: "+ b);

19 範例41:續 a = 4; b = a<<1; System.out.println("正數測試左移運算元 <<: "+ b); a = -4; b = a<<1; System.out.println("負數測試左移運算元 <<: "+ b); a = 4; b = a>>>1; System.out.println("正數測試0值右移運算元 >>>: "+ b); a = -4; b = a>>>1; System.out.println("負數測試0值右移運算元 >>>: "+ b); } 23 }

20 範例43: 大於32位元位移之應用。 01 class Ex05_7_2_2 {
01 class Ex05_7_2_2 { 02 public static void main (String[] argv) { int a, b; a = 4; b = a>>1; System.out.println("正數測試右移運算元 >>: "+ b); a = 4; b = a>>33; System.out.println("測試大於32位元之位移: "+ b); a = -4; b = a>>1; System.out.println("負數測試右移運算元 >>: "+ b); a = -4; b = a>>33; System.out.println("測試大於32位元之位移: "+ b);

21 範例43:續 a = 4; b = a<<1; System.out.println("正數測試左移運算元 <<: "+ b); a = 4; b = a<<33; System.out.println("測試大於32位元之位移: "+ b); a = -4; b = a<<1; System.out.println("負數測試左移運算元 <<: "+ b); a = -4; b = a<<33; System.out.println("測試大於32位元之位移: "+ b); } 29 }

22 範例47: 位元邏輯運算元之應用。 01 class Ex05_7_3 {
01 class Ex05_7_3 { 02 public static void main (String[] argv) { int a = 9, b = 10, c; c = a & b; System.out.println("測試運算元 &: "+ c); c = a | b; System.out.println("測試運算元 |: "+ c); c = a ^ b; System.out.println("測試運算元 ^: "+ c); } 11 }

23 5-8 資料轉型(Type Conversion)
較小範圍資料型態之變數可自動轉換成較大範圍之資料型態,亦即小範圍之變數可輕易置入大範圍之容器內,是謂 “放大轉型(Widening Conversion)” 或稱 “隱性轉型(Implicit Casting)”。 較大範圍資料型態之變數需經過強迫手段,才可轉換成較小範圍之資料型態,如圖5-8-1之反箭頭方向,亦即大範圍之變數無法輕易置入小範圍之容器內,是謂 “縮小轉型(Narrowing Conversion)” 或稱 “顯性轉型(Explicit Casting)”。

24 範例49: 資料變數自動轉型之應用。 01 class Ex05_8_1 {
01 class Ex05_8_1 { 02 public static void main (String[] argv) { byte bt; short sh; int in; long lg; float ft; double db;

25 範例49:續 bt = 97; sh = bt; System.out.println("short<--byte:"+sh+"<--"+bt); in = sh; System.out.println("int<--short:"+in+"<--"+sh); lg = in; System.out.println("long<--int:"+lg+"<--"+in); ft = lg; System.out.println("float<--long:"+ft+"<--"+lg); db = ft; System.out.println("double<--float:"+db+"<--"+ft); } 21 }

26 範例50: 資料變數強迫轉型之應用。 01 class Ex05_8_2 {
01 class Ex05_8_2 { 02 public static void main (String[] argv) { byte bt; short sh; int in; long lg; float ft; double db;

27 範例50:續 09 db = 97.0; 10 ft = (float)db;
System.out.println("float<--double:"+ft+"<--"+db); lg = (long)ft; System.out.println("long<--float:"+lg+"<--"+ft); in = (int)lg; System.out.println("int<--long:"+in+"<--"+lg); sh = (short)in; System.out.println("short<--int:"+sh+"<--"+in); bt = (byte)sh; System.out.println("bt<--short:"+bt+"<--"+sh); } 20 }

28 5-9 條件運算元(Conditional Operators)
當Java程式執行到邏輯決策選擇時,我們使用條件運算式,條件運算式是由運算元符號 “問號(?) ”、與 “ 冒號(:) ” 組成,其格式為: Max = ( (a > b) ? a : b);

29 範例51: 條件式之應用。 01 class Ex05_9 { 02 public static void main (String[] argv) { int a=3, b=2, M, N; M = ((a>b) ? a : b); System.out.println("M = "+M); if (a>b) N = a; else N = b; System.out.println("N = "+N); } 12 }


Download ppt "第五章 運算關係式(Expression)."

Similar presentations


Ads by Google