Java基礎-學習筆記04

JuneFall發表於2024-07-16

04 運算子 進位制

1. 運算子

邏輯與 & 和 短路與 &&

共同點:兩個條件都為true時,結果為true,否則為false。
& 邏輯與:不管第一個條件是否為false,第二個條件都要判斷;
&& 短路與:如果第一個條件判斷為false,則第二個條件不會判斷。

邏輯或 | 和 短路或 ||

共同點:兩個條件只要有一個成立,結果為true,否則為false。
| 邏輯或:不管第一個條件是否為true,第二個條件都要判斷;
|| 短路或:如果第一個條件為true,則第二個條件不會判斷。

邏輯異或 ^

當兩個條件的結果相同時,結果為true,否則為false。

賦值運算子

符合賦值符合賦值運算子會進行型別轉換

byte b = 3;
b += 2; //b = b + 2;
b++; //b = (byte)(b+1);

2. 原碼、反碼、補碼

二進位制:0b或0B開頭
十進位制:(非0開頭)
八進位制:0開頭
十六進位制:0x或0X開頭

  • 二進位制轉成八進位制
    從低位開始,每三位一組,轉成對應的八進位制數即可;
  • 二進位制轉十六進位制
    從低位開始,每四位一組,轉成對應的十六進位制數即可;
  • 八進位制轉換為二進位制
    將八進位制數每一位,轉成對應的三位二進位制數即可;

ob11010101 => 0325
ob11010101 => 0xD5

System.out.println(~-2);

分析:

  1. -2是int型,4個位元組,得到-2的原碼是 10000000 00000000 00000000 00000010
  2. -2的反碼是 11111111 11111111 11111111 11111101
  3. -2的補碼是 11111111 11111111 11111111 11111110
  4. 按位取反是 00000000 00000000 00000000 00000001
    這是運算後的補碼,由於其符號位是0表示正數,所以其對應的原碼相同,即,最後結果為 1
System.out.println(~2);

分析:

  1. 2的原碼、反碼、補碼都是 00000000 00000000 00000000 00000010
  2. 按位取反 11111111 11111111 11111111 11111101
    得到的是結果的補碼,需把其對應原碼找到
  3. 結果的反碼是 11111111 11111111 11111111 11111100
  4. 原碼是 10000000 00000000 00000000 00000011
    結果是 -3
  1. 二進位制的最高位是符號位:0表示正數,1表示複數

  2. 正數的原碼、反碼、補碼都一樣

  3. 負數的反碼 = 它的原碼符號位不變,其他位取反

  4. 負數的補碼 = 它的反碼 + 1, 負數的反碼 = 它的補碼 - 1

  5. 0的反碼、補碼都是0

  6. Java中的數都是由符號的

  7. 計算機運算時,都是以補碼的方式來運算的

  8. 當我們看運算結果的時候,要看它的原碼

  9. 位運算子

<< >>>
低位溢位,高位補0

System.out.println(1 >> 2); //00000001 => 00000000, 即0
System.out.println(4 << 3); //00000100 => 00100000, 即 4*2*2*2 = 32

相關文章