10   運算關係式Expression(2)

[10-1邏輯運算]

用於邏輯運算的邏輯運算子(Logical Operators)包含and( &)or( | )not( ! ),運算結果整理如下表:

a

b

a&b

a | b

!a

True

True

True

True

False

True

False

False

True

False

False

True

False

True

True

False

False

False

False

True

 

<邏輯運算實例>

class Logical1 {

public static void main (String[] args) {

    System.out.println("(false&true)運算結果 = " + (false&true));

    System.out.println("(true|false)運算結果 = "+ (true|false));

    System.out.println("(!true)運算結果 = "+ (!true));

}

}

執行結果:C:\js>java Logical1

(false&true)運算結果 = false

(true|false)運算結果 = true

(!true)運算結果 = false

 

真正有意義之邏輯運算實例,須待緊接著發表的「流程控制」章節中再一併說明。

 

 

[10-2短路邏輯運算]

短路邏輯運算顧名思義即是走捷徑的意思,當前面部分的運算已知整體結果時,就可略掉後面的運算,此時必須使用不同於一般邏輯運算的運算符號,也就是明示要採取短路運算,否則仍然會進行後面部分的運算。又因為如此,如果後面部分的運算是有意義的話,就不可採取短路運算。短路邏輯運算子(Short Circuit Logical Operators)使用2個邏輯運算子符號,短路and(&&)及短路or( | | )

and(&&):第一個運算值為false時,已注定邏輯運算結果為false,將不必繼續執行第二個運算。

or( | | ):第一個運算值為true時,已注定邏輯運算結果為true,將不必繼續執行第二個運算。

 

<短路邏輯運算實例>

class Short10 {

   public static void main (String[] args) {

     int in1 = 3;

     System.out.println("測試 (true && (++in1 > 0)) = "+

                                            (true && (++in1 > 0)));

     System.out.println("測試是否有執行 ++ in1 "+ in1);

     /*參照前述邏輯運算表格,因第一個值為true,須進行第二個運算式(++in1>0)才能決定整個運算式的結果為truefalse,如(++in1>0)true,整個運算式結果為true,如(++in1>0)false,整個運算式結果為false。結果in1=4

   */

 

     in1 = 3;

     System.out.println("測試 (false && (++in1 > 0)) = "+

                                           (false && (++in1 > 0)));

     System.out.println("測試是否有執行 ++ in1 "+ in1);

      /*因第一個運算值false已決定整個運算式的值為false,故不用執行(++in1>0)in1=3 */

 

     System.out.println("測試 (true || (++in1 > 0)) = "+ (true || (++in1> 0)));

     System.out.println("測試是否有執行 ++ in1 "+ in1);

     // (++in1>0)不用執行,in1=3

 

     in1 = 3;

     System.out.println("測試 (false || (++in1 > 0)) = "+

                                           (false || (++in1 > 0)));

     System.out.println("測試是否有執行 ++ in1 "+ in1);

     // (++in1>0)要執行,in1=3+1=4

  }

}

執行結果:C:\js>java Short10

測試 (true && (++in1 > 0)) = true

測試是否有執行 ++ in1 4

測試 (false && (++in1 > 0)) = false

測試是否有執行 ++ in1 3

測試 (true || (++in1 > 0)) = true

測試是否有執行 ++ in1 3

測試 (false || (++in1 > 0)) = true

測試是否有執行 ++ in1 4

 

真正有意義之短路邏輯運算實例,須待緊接著發表的「流程控制」章節中再一併說明。

 

 

[10-3 if-else三元運算]

if-else三元運算是沒有if-else的運算。

格式:

boolean-exp? exp1 or value1exp2 or value2

 

Boolean-exp為真時,值為執行exp1結果或為value1Boolean-exp為假時,值為執行exp2結果或為value2。使用if-else三元運算子程式較簡潔,但不易懂。如使用後述if-else述句,則較容易懂,程式碼是多了些。

 

<if-else三元運算實例>

class Ternary3{

   public static void main (String[] args) {

     int x = 5;

 

     // if-else 三元運算 x > 10 ? x + 20 : x+30

     System.out.println("1. x > 10 ? x + 20 : x+30結果為" +

 ( x > 10 ? x + 20 :x+30));

 

     System.out.println("2. x > 3 ? 100 : 200結果為" +( x > 3 ? 100 : 200));

 

     // x > 10 ? x + 20 : x+30轉換為if-else述句

     if (x > 10)

       System.out.println("3. x > 10結果為" +( x + 20));

     else

       System.out.println("4. x < 10結果為" +( x + 30));

   }

}

執行結果:C:\js>java Ternary3

1. x > 10 ? x + 20 : x+30結果為35

2. x > 3 ? 100 : 200結果為100

4. x < 10結果為35

 

 

 

[10-4轉型運算](Casting Operators)

轉型運算即前述的資料型別轉換的強迫轉型。轉型運算子(Casting Operators)使用下述方式:

(轉型目標型別)欄位或稱變數;

 

基本型別除boolean型別外皆能強迫轉型。

class型別不允許轉型,String是個特例,但同一族系classes的物件之間可以轉型,以後會有說明。

 

 

[10-5其他的運算]

其他運算尚包含使用位元運算子(Bitwise Operators)的位元運算、使用位移運算子(Shift Bitwise Operators)的位移運算、使用補數運算子(Complement Bitwise Operators)的補數運算等,因較不常使用,待後續有機會再行補足。

 

arrow
arrow
    創作者介紹
    創作者 祈泊 的頭像
    祈泊

    祈泊的部落格

    祈泊 發表在 痞客邦 留言(0) 人氣()