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);
分析:
- -2是int型,4個位元組,得到-2的原碼是 10000000 00000000 00000000 00000010
- -2的反碼是 11111111 11111111 11111111 11111101
- -2的補碼是 11111111 11111111 11111111 11111110
- 按位取反是 00000000 00000000 00000000 00000001
這是運算後的補碼,由於其符號位是0表示正數,所以其對應的原碼相同,即,最後結果為 1
System.out.println(~2);
分析:
- 2的原碼、反碼、補碼都是 00000000 00000000 00000000 00000010
- 按位取反 11111111 11111111 11111111 11111101
得到的是結果的補碼,需把其對應原碼找到- 結果的反碼是 11111111 11111111 11111111 11111100
- 原碼是 10000000 00000000 00000000 00000011
結果是 -3
-
二進位制的最高位是符號位:0表示正數,1表示複數
-
正數的原碼、反碼、補碼都一樣
-
負數的反碼 = 它的原碼符號位不變,其他位取反
-
負數的補碼 = 它的反碼 + 1, 負數的反碼 = 它的補碼 - 1
-
0的反碼、補碼都是0
-
Java中的數都是由符號的
-
計算機運算時,都是以補碼的方式來運算的
-
當我們看運算結果的時候,要看它的原碼
-
位運算子
<< >>>
低位溢位,高位補0
System.out.println(1 >> 2); //00000001 => 00000000, 即0
System.out.println(4 << 3); //00000100 => 00100000, 即 4*2*2*2 = 32