黃階低級 - 《 Java 核心》- 3.5 運算符 - 修改0次

1、自增自減運算符

  • 有兩種形式,前綴和後綴,前綴先進行加1運算,後綴使用變量原來的值。
int m = 7;
int n = 7;
int a = 2 * ++m;// now a is 16, m is 8
int b = 2 * n++;// now b is 14, n is 8

2、關係和 boolean 運算符

  • 常見的判斷相等和不等的運算符。
  • && 和 || 是按照“短路”方式求值的。
System.out.print(2 < 0 && (3 / 0 > 0));// 輸出false,不會報錯
System.out.print(2 > 0 || (3 / 0 > 0));// 輸出true,不會報錯

3、位運算符

  • Java 位運算是針對整型數據類型的二進制進行的移位運算
  • & 和 | 運算符不按“短路”方式計算。
System.out.print(2 > 0 & (3 / 0 > 0));// 整數除以0異常
System.out.print(2 > 0 | (3 / 0 > 0));// 假設能運行到這一行,也是整數除以0異常
  • 有符號左移<<【若正數,高位補0,負數,高位補1】

    -4<<2
    1111 1111 1111 1111 1111 1111 1111 1100 原碼
    1111 1111 1111 1111 1111 1111 1111 0000 左移,最右邊空出兩位補0
    0000 0000 0000 0000 0000 0000 0000 1111 解碼
    0000 0000 0000 0000 0000 0000 0001 0000 補碼
    結果:-16

  • 有符號右移(擴展符號位)>>【若正數,高位補0,負數,高位補1】

    -4>>2
    1111 1111 1111 1111 1111 1111 1111 1100 原碼
    1111 1111 1111 1111 1111 1111 1111 1111 右移,最左邊空出兩位按規則負數空位補1
    0000 0000 0000 0000 0000 0000 0000 0000 解碼
    0000 0000 0000 0000 0000 0000 0000 0001 補碼(補碼即最後一位+1)
    結果:-1

  • 無符號右移(邏輯右移)>>>【不論正負,高位均補0】

    -4>>>2
    1111 1111 1111 1111 1111 1111 1111 1100 原碼
    0011 1111 1111 1111 1111 1111 1111 1111 右移(由於高位均補0,故>>>後的結果一定是正數)
    結果:1073741823

  • 位移數超過表示範圍時, byte、char 和 short 擴充到32位取模, int 類型32位取模,long類型64位取模。所以 4>>32 和 4>>0 是等價的。

int m = -9;
int n = 6;
System.out.println(~n + 1);// 求相反數
System.out.println(n & 1);// 等價於a%2,判斷奇偶
System.out.println((m & n) + ((m ^ n) >> 1));// 求平均數,不會溢出,但不能求浮點
System.out.println(n + (m - n) / 2.0);// 求平均數,不會溢出,可以求浮點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章