1. 程式人生 > >java基礎語言 運算符

java基礎語言 運算符

java 自己實現 等價 強制類型轉換 logs amp 不同 rgs 定義

/*
    ++,--運算符的使用:
        單獨使用:
            放在操作數的前面和後面效果一樣。(這種用法是我們比較常見的)
        參與運算使用:
            放在操作數的前面,先自增或者自減,然後再參與運算。
            放在操作數的後面,先參與運算,再自增或者自減。
            
    作用:就是對變量進行自增1或者自減1。
*/
public class Text3 {
        public static void main(String[] args) {
            //定義兩個變量
            int
x = 3; int y = 4; //單獨使用 //x++; //y--; ++x; --y; System.out.println("x:"+x+",y:"+y);//x++或者++x,單獨使用時,輸出的值都是一樣,這裏為4;y--或者--y,單獨使用時,輸出的值都是一樣,這裏為3 System.out.println("-------------------"); //參與運算使用 int
a = 3; int b = 4; //int c = a++; //int d = b--; int e = ++a; int f = --b; System.out.println("a:"+a); //4 System.out.println("b:"+b); //3 //System.out.println("c:"+c); //3
//System.out.println("d:"+d); //4 System.out.println("e:"+e); //4 System.out.println("f:"+f); //3 } }
/*
    ++,--的練習題
    
    第一題:
    int a = 10;
    int b = 10;
    int c = 10;

    a = b++;
    c = --a;
    b = ++a;
    a = c--;
    請分別計算出a,b,c的值
    
    第二題:
    int x = 4;
    int y = (x++)+(++x)+(x*10);
    請分別計算出x,y的值
*/
public class Text3 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int c = 10;

        a = b++; //a=10,b=11,c=10
        c = --a; //a=9,b=11,c=9
        b = ++a; //a=10,b=10,c=9
        a = c--; //a=9,b=10,c=8
        
        System.out.println("a:"+a);  //9
        System.out.println("b:"+b);  //10
        System.out.println("c:"+c);  //8
        System.out.println("--------------");
        
        int x = 4;
        int y = (x++)+(++x)+(x*10);
        //4+6+60
        //x=5,6
        
        System.out.println("x:"+x);  //6
        System.out.println("y:"+y);  //70
    }
}
/*
    面試題(可能性大):
        short s=1;s = s+1; 
        
        short s=1;s+=1;
        上面兩個代碼有沒有問題,如果有,那裏有問題。
        
        為什麽第二個木有問題呢?
            擴展的賦值運算符其實隱含了一個強制類型轉換。
            
            s += 1;
            不是等價於 s = s + 1;
            而是等價於 s = (s的數據類型)(s + 1);
*/
public class Text4 {
    public static void main(String[] args) {
        //short s = 1;
        //s = s + 1;
        //System.out.println(s); //損失精度,
        
        short s = 1;
        s += 1; //好像是 s = s + 1;
        System.out.println(s);  //2
    }
}
/*
    位運算符:
        &,|,^,~
        <<,>>,>>>
        
    註意:
        要做位運算,首先要把數據轉換為二進制。
*/
public class Text4 {
    public static void main(String[] args) {
        //&,|,^,~
        
        int a = 3;
        int b = 4;
        
        System.out.println(3 & 4);  //0
        System.out.println(3 | 4);  //7
        System.out.println(3 ^ 4);  //7 
        System.out.println(~3);     //-4
    }
}
/*
    分析:因為是位運算,所以我們必須先把數據換算成二進制。
    
    3的二進制:11
        00000000 00000000 00000000 00000011
    4的二進制:100
        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 (補碼)
       
       補碼:11111111 11111111 11111111 11111100
       反碼:11111111 11111111 11111111 11111011
       原碼:10000000 00000000 00000000 00000100
        結果是:-4
*/
/*
    面試題:
        請自己實現兩個整數變量的交換
        註意:以後講課的過程中,我沒有明確指定數據的類型,默認int類型。
*/
public class Text4 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        
        System.out.println("a:"+a+",b:"+b);
        
        //方式1:使用第三方變量(開發中用的)
        /*
        int c = a;
        a = b;
        b = c;
        System.out.println("a:"+a+",b:"+b);
        System.out.println("------------");
        */
        
        //方式2:用位異或實現(面試用)
        //左邊:a,b,a
        //右邊:a ^ b
        /*
        a = a ^ b;
        b = a ^ b; //a ^ b ^ b = a
        a = a ^ b; //a ^ b ^ a = b
        System.out.println("a:"+a+",b:"+b);
        */
        
        //方式3:用變量相加的做法
        /*
        a = a + b; //a=30
        b = a - b; //b=10
        a = a - b; //a=20
        System.out.println("a:"+a+",b:"+b);
        */
        
        //方式4:一句話搞定
        b = (a+b) - (a=b); //b=30-20=10,a=20
        System.out.println("a:"+a+",b:"+b);
    }
}

java基礎語言 運算符