2015年6月30日 星期二

8 運算關係式Expression(2)

8     運算關係式Expression(2)
邏輯運算子(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





短路邏輯運算(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);
    // (++in1>0)要執行,in1=3+1=4
    in1 = 3;
    System.out.println("測試 (false && (++in1 > 0)) = "+ (false && (++in1 > 0)));
    System.out.println("測試是否有執行 ++ in1 "+ in1);
    // (++in1>0)不用執行,in1=3
    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



if-else三元運算子
if-else三元運算子是沒有if-else的運算子。
格式:
boolean-exp? exp1 or value1exp2 or value2

Boolean-exp為真時,值為執行exp1結果或為value1Boolean-exp為假時,值為執行exp2結果或為value12。使用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));

    //  if-else述句x > 10 ? x + 20 : x+30
    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



轉型運算子(Casting Operators)
轉型運算子即前述的資料型別轉換的強迫轉型。
基本型別除boolean型別外皆能強迫轉型。
class型別不允許轉型,String是個特例,但同一classes的物件之間可以轉型,以後會有說明。


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


沒有留言:

張貼留言