十一、進制


1、進制介紹

進制:指進位制,是人們規定的一種進位方式

常見進制:二進制、八進制、十進制、十六進制

十進制是逢十進一,二進制就是逢二進一,八進制是逢八進一…

常見進制:二進制,八進制,十進制,十六進制

2、二進制

介紹:二進制數據是0和1兩個數碼來表示。例如:00101000。

進位規則是“逢二進一”,借位規則是“借一當二”。

3、十進制

4、八進制和十六進制

  • 八進制介紹:采用0,1,2,3,4,5,6,7八個數字,逢八進1

  • 十六進制介紹:用數字0到9和字母A到F(或af)表示,其中:AF表示10~15,這些稱作十六進制。

    【0】【1】【2】【3】【4】【5】【6】【7】【8】【9】【a】【b】【c】【d】【e】【f】

5、不同進制書寫

10 十進制,不進行修飾

0b1000 1100 二進制,用0b修飾

077 八進制,用0修飾

0xf102a 十六進制,用0x修飾

6、任意進制轉十進制

  • 公式:系數 * 基數的權次冪 相加
    • 系數:每一【位】上的數
    • 基數:幾進制,就是幾
    • 權從數值的右側,以 0 開始,逐個 +1 增加

二進制轉十進制

十六進制轉十進制

7、十進制轉任意進制

  • 公式:除基取余

使用源數據,不斷的除以基礎(幾進制,基數就是幾)得到余數,直到商為0,再將余數倒着拼起來即可。

十進制轉二進制

十進制轉十六進制

8、快速進制轉換法

8.1、8421碼

  • 8421碼又稱BCD碼,是BCD碼中最常用的一種
  • BCD: (Binary-Coded Decimal) 二進制碼十進制數
  • 在這中編碼方式中,每一位二進制值的1都是代表一個固定數值,把每一位的1代表的十進制數加起來得到的結果就是它所代表的十進制數。

8.2、二進制快速轉十進制

8.2、二進制快速轉八進制

  • 八進制:將三個二進制位看為一組,在進行轉換

  • 原因:八進制逢八進一,三個二進制位最多可以表示111,也就是7,如果出現第四位,就超范圍了

  • 需求:將60的二進制 0b111100 轉換為八進制

8.4、二進制快速轉十六進制

  • 十六進制:將四個二進制位看為一組,在進行轉換

  • 原因:十六進制逢十六進一,四個二進制位最多可以表示1111,也就是15,如果出現第五位,就超范圍了

  • 需求:將60的二進制 0b111100 轉換為十六進制

9、原碼反碼補碼

9.1、介紹

注意:計算機中的數據,都是以二進制補碼的形式在運算,二補碼則是通過反碼和原碼推算出來的

  • 原碼(可直觀看出數據大小

    就是二進制定點表示法,即最高為符號位,【0】表示正,【1】表示負,其余位表示數值的大小。

    通過一個字節表示 +7 和 -7,代碼:byte b1= 7byte b2 = -7;

    一個字節等於8個比特位,也就是8個二進制位

    ​ 0(符號位) 0000111

    ​ 1(符號位) 0000111

  • 反碼:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

  • 補碼(數據以該狀態進行運算

    正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1

總結:

  • 正數的原反補都是相同的
  • 負數的【反碼】,是根據【原碼】取反(0變1,1變0)得到的。(符號位不變)
  • 負數的【補碼】,是根據【反碼】的末尾+1,得到的

9.2、求 -7 的補碼

10、位運算

10.1、位運算介紹

  • 位運算符指的是二進制位的運算,先將十進制數轉成二進制后在進行運算
  • 在二進制位運算中,1表示 true,0表示 false
符號 計算方式
& 與 遇0則0;兩邊同時為1,結果才是1
| 或 遇1則1;兩邊同時為0,結果才是0
^ 異或 相同為0,不同為1
~ 取反 取反,二進制位全部取反,0變1,1變0,包括符號位
<< 有符號左移運算,左邊符號位丟棄,右邊補齊0
>> 有符號右移運算,根據符號位,補齊左邊
>>> 無符號右移,無論最符號位是0還是1,都補0

10.2、異或運算的特點

一個數,被另外一個數,異或兩次,該數本身不變

案例:

已知兩個整數變量a = 10,b=20,使用程序實現這兩個變量的數據交換,不允許使用三方變量

public static void main(String[] args){
    int a = 10;
    int b = 20;
    a = a ^ b;  // a = 10 ^ 20;
    b = a ^ b;	// b = 10 ^ 20 ^ 20;
    a = a ^ b;  // a = 10 ^ 20 ^ 10;
    System.out.println(a);
    System.out.println(b);
}

案例:數組反轉

int[] arr = {19,25,36,47,58};
int temp;

for(int start = 0,end = arr.length-1 ; start<end ; start++,end--){
    arr[start] = arr[end] ^ arr[start];
    arr[end] = arr[start] ^ arr[end];
    arr[start] = arr[start] ^ arr[end];
}

System.out.println(Arrays.toString(arr));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM