1. 程式人生 > 其它 >十一、進位制

十一、進位制

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碼

8.2、二進位制快速轉十進位制

8.2、二進位制快速轉八進位制

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

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));