java基礎語言 運算符
阿新 • • 發佈:2017-07-15
java 自己實現 等價 強制類型轉換 logs amp 不同 rgs 定義
/* ++,--運算符的使用: 單獨使用: 放在操作數的前面和後面效果一樣。(這種用法是我們比較常見的) 參與運算使用: 放在操作數的前面,先自增或者自減,然後再參與運算。 放在操作數的後面,先參與運算,再自增或者自減。 作用:就是對變量進行自增1或者自減1。 */ public class Text3 { public static void main(String[] args) { //定義兩個變量 intx = 3; int y = 4; //單獨使用 //x++; //y--; ++x; --y; System.out.println("x:"+x+",y:"+y);//x++或者++x,單獨使用時,輸出的值都是一樣,這裏為4;y--或者--y,單獨使用時,輸出的值都是一樣,這裏為3 System.out.println("-------------------"); //參與運算使用 inta = 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基礎語言 運算符