1. 程式人生 > 其它 >Java-4 運算子

Java-4 運算子

一、運算子:(算術運算子 賦值運算子 關係運算符 邏輯運算子 位運算子 三目運算子)

1.算術運算子

  

舉例:+號的使用:

1.對於數值就是加號
2.對於字元char來說,在計算之前,char會被提升為int,然後再計算
3.對於字串String(首字母大寫,並不是關鍵字),加號代表字串連線操作,任何資料型別和字串進行連線都會變成字串
二、自增運算,自減運算(只有變數可以使用自增自減運算子,常量不可用)
1、單獨使用,自己獨立成為一個步驟
2、混合使用 ,和其它操作一起,例如與賦值混合,或者與列印操作混合等
使用區別:
1、單獨使用++i,i++沒有什麼區別,兩個完全一樣
2、在混合的時候,有重大區別
A、如果是i++,那麼變數立刻加一,然後拿著結果使用 先加後用

B、如果是++i,那麼先使用變數本來的值,然後再讓變數加一 先用後加
String str1 = "hello" ;
        String str2 = "world";
        System.out.println(str1+str2);
        System.out.println(str1+1);
        System.out.println(str1+1+2);//優先順序問題 String+int+int 輸出hello12
        //自增自減運算
        int i = 10 ;
        i++;//單獨使用
        System.out.println(i);  //
11 ++i; System.out.println(i); //12 //與列印混合操作時 int j = 11; System.out.println(++j);//12 變數立馬加1列印結果 System.out.println(j);//12 System.out.println(j++);//12 變數先列印結果,再加1 System.out.println(j);//13

2.賦值運算子(= += -= *= /= %=)

  1. 基本賦值:=

例子:int a = 1;

  錯誤寫法:int = a = b =1;

  2.注意事項:

    a += 1 ;和 a = a + 1;有什麼區別?

    a += 1 並不是轉換成a = a + 1 ;而是轉換成 a = (a的資料型別)(a + 1)

3.關係運算符

注意事項:

    1.關係運算符結果都是Boolean型,也就是要麼是true,要麼是false

    2.如果進行多次比較不能連著寫,可以使用邏輯運算子拆開寫

    3.常量也可以比較

4.邏輯運算子

public class LogicDemo {
    public static void main(String[] args) {
        int a = 2 ;
        int b = 3 ;
        int c = 4 ;
        //&邏輯運算   System.out.println( a & b );則變成了位運算中的與運算
        System.out.println(a > b & a < c );//false
        System.out.println(a > b & a > c );//false
        System.out.println(a < b & a < c );//true
        System.out.println(a < b & a > c );//false
        //|邏輯或運算
        System.out.println(a > b | a < c );//true
        System.out.println(a > b | a > c );//false
        System.out.println(a < b | a < c );//true
        System.out.println(a < b | a > c );//true
        //^異或運算
        System.out.println(a > b ^ a < c );//true
        System.out.println(a > b ^ a > c );//false
        System.out.println(a < b ^ a < c );//false
        System.out.println(a < b ^ a > c );//true
    }
}

  4.1 結論:

    邏輯與&:有false則false 邏輯或|:有true則true 邏輯異或^: 相同為false,不同為true

  4.2 注意事項:

    1.邏輯運算子用於連線布林型表示式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。 

    2.“&”和“&&”的區別: 單&時,左邊無論真假,右邊都進行運算; 雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那麼右邊不參與運算。

    3.“|”和“||”的區別同理,雙或時,左邊為真,右邊不參與運算。 異或( ^ )與或( | )的不同之處是:當左右都為true時,結果為false。

 int x = 3;
        int y = 4;
//        boolean b1 = ((x++==3) & (y++==4));
//        System.out.println(b1); //true
//        System.out.println("x: "+x);
//        System.out.println("y: "+y);

//        System.out.println("--------------------------");
//        boolean b2 = ((x++==5) && (y++==4));
//        System.out.println(b2); //true
//        System.out.println("x: "+x);
//        System.out.println("y: "+y);

//        boolean b2 = ((x++==3) | (y++==4));
//        System.out.println(b2); //true
//        System.out.println("x: "+x); //4
//        System.out.println("y: "+y); //5

        boolean b2 = ((x++==3) || (y++==6));
        System.out.println(b2); //true
        System.out.println("x: "+x); //4
        System.out.println("y: "+y); //4

5.位運算子

public class OptPositionDemo1 {
    public static void main(String[] args) {

        int x = 3;
        int y = 4;

        System.out.println(x&y); //0
        System.out.println(x|y); //7
        System.out.println(x^y); //7
        System.out.println(~x);  //-4

    }
}

/*
       分析:
            要先得到二進位制  計算機中資料參與運算的都是補碼

      3的二進位制:11
      4的二進位制:100
      3的原碼、反碼、補碼:00000000 00000000 00000000 00000011
      4的原碼、反碼、補碼:00000000 00000000 00000000 00000100

      &位與運算:有0則0
          00000000 00000000 00000000 00000011
        &
          00000000 00000000 00000000 00000100
       -----------------------------------------
          00000000 00000000 00000000 00000000
       結果是0


      |位或運算:有1則1
          00000000 00000000 00000000 00000011
        |
          00000000 00000000 00000000 00000100
      ------------------------------------------
          00000000 00000000 00000000 00000111
       結果是7

      ^位異或運算:相同則0,不同則1
          00000000 00000000 00000000 00000011
        ^
          00000000 00000000 00000000 00000100
      ------------------------------------------
          00000000 00000000 00000000 00000111
       結果是7

      ~位取反:0變成1,1變成0
          00000000 00000000 00000000 00000011
         --------------------------------------
        ~ 11111111 11111111 11111111 11111100

        補碼求原碼:
              符號位                    數值位
        補碼:  1              1111111 11111111 11111111 11111100
        反碼:  1              1111111 11111111 11111111 11111011
        原碼:  1              0000000 00000000 00000000 00000100
        結果是-4
 */
/*
    位運算:
            >>,>>>,<<

            <<:左移:向左移動,最高位丟棄,右邊補0
            >>:右移:向右移動,最高位是0,左邊補0,最高位是1,左邊補1
            >>>:無符號右移:向右移動,無論最高位是0還是1,右邊都用0補齊
 */
public class OptPositionDemo2 {
    public static void main(String[] args) {
        System.out.println(3 << 2);
        System.out.println(24 >> 2);
        System.out.println(24 >>> 2);

        System.out.println(-24>>2);
        System.out.println(-24>>>2);
    }
}

/*
        分析:
            想要參與位運算,就必須得先知道二進位制
        1、計算出3的二進位制:11
        3的二進位制補碼:
                       00000000 00000000 00000000 00000011
                   (00)000000 00000000 00000000 0000001100
        結果是:12

        2、計算出24的二進位制:11000
        24的二進位制的補碼:
                       00000000 00000000 00000000 00011000
                       0000000000 00000000 00000000 000110(00)
        結果是:6


        3、計算出24的二進位制:11000
        24的二進位制的補碼:
                       00000000 00000000 00000000 00011000
                       0000000000 00000000 00000000 000110(00)
        結果是:6

        4、計算出-24的二進位制:11000
           原碼: 10000000 00000000 00000000 00011000
           反碼: 11111111 11111111 11111111 11100111
           補碼: 11111111 11111111 11111111 11101000

           -24的補碼:
                  11111111 11111111 11111111 11101000
                  11111111 11111111 11111111 11111010(00)
           補碼:11111111 11111111 11111111 11111010
           反碼:11111111 11111111 11111111 11111001
           原碼:10000000 00000000 00000000 00000110    
           結果是:-6

       5、 計算出-24的二進位制:11000
           原碼: 10000000 00000000 00000000 00011000
           反碼: 11111111 11111111 11111111 11100111
           補碼: 11111111 11111111 11111111 11101000     //右移

           -24的補碼:
                  11111111 11111111 11111111 11101000
                  0011111111 11111111 11111111 111010(00)  //無符號右移
          結果是:1073741818
 */

6.三目運算子 

1.一元運算子:只需要一個數據就可以進行操作的運算子。 例如;取反!、自增++、自減--
2.二元運算子:需要兩個資料才可以操作的運算子。 例:加法+、賦值=
3.三元運算子:需要三個資料才可以進行操作的運算子
格式
資料型別 變數名稱 = 條件判斷 ?表示式A :表示式B;
流程:
如果條件判斷成立,將表示式A的值賦值給左側變數
如果不成立,將表示式B的值賦值給左側變數
注意事項:
1.必須同時保證表示式A和表示式B都符合左側資料型別的要求
2.三元運算子的結果必須被使用
public class Perator1 {
    public static void main(String[] args) {
        int a = 10 ;
        a += 10 ;
        System.out.println(a);//20

        //三元運算子
        int b = 20 ;
        int c = 30 ;
        int max = b > c ? b : c ;
        System.out.println("最大值"+max);   //正確寫法
        System.out.println(b > c ? b : c ); //正確寫法
        //int result = 3 > 4 ? 2.5 : 3;   //錯誤寫法   必須同時保證表示式A和表示式B都符合左側資料型別的要求
    }
}