程式員不得不了解的計算機進制轉換
最近在備考軟考的軟體設計師考試,學到了關于計算機的資料表示,由于我是半路出家學的Java,導致計算機基礎知識很差,在這里記錄一下學習感受
為啥要用二進制
- 早期計算機的存盤介質是晶體管,晶體管根據電壓不同,只能表示2種狀態,也就是0和1
- 計算機使用二進制運算更加方便
更詳細的請參考計算機為啥采用二進制
為啥要用十六進制
首先,假如你的計算機是32位的機器,數字1在計算機中的表示就是0000000000000000001,
假如你是要操作記憶體,用這么長一串二進制數,是不是感覺有點頭大,1位16進制數可以表示4位二進制數,
那數字1用16進制來表示就是1H,是不是感覺清爽多了,
進制轉換的原理
閱讀本章之前需要明確的點
- 進制數的位數從右到左,分別表示從高到低,我們稱右邊的數為高位,左邊的數為低位
- 一位八進制數最多表示三位二進制數,一位十六進制數最多表示4位二進制數
十進制轉二進制、八進制、十六進制
對于10進制轉其他進制,一般是使用除法取余數的方式進行計算
例如將數字151 轉換為二進制
被除數 ÷ 除數 = 商 ... 余數
151 ÷ 2 = 75 ... 1
75 ÷ 2 = 37 ... 1
37 ÷ 2 = 18 ... 1
18 ÷ 2 = 9 ... 0
9 ÷ 2 = 4 ... 1
4 ÷ 2 = 2 ... 0
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1
將每一步得到的余數從下往上依次排列,得到 10010111,即151的二進制表示,
轉為八進制
151 ÷ 8 = 18 ... 7
18 ÷ 8 = 2 ... 2
2 ÷ 8 = 0 ... 2
151的8進制表示為227
轉為十六進制
151 ÷ 16 = 9 ... 7
9 ÷ 16 = 0 ... 9
因此,151的16進制數為97
二進制、八進制、十六進制轉十進制
對于其他進制轉換為10進制,我們一般是采用按權展開法,并且具有公式


例如: 十進制數11的二進制數為1011
使用按權展開法,首先該二進制數有4位,所以n為4,可以得出以下式子

對于八進制,十六進制都是使用該方法轉換為10進制
二進制、八進制、十六進制之間互相轉換
將二進制數轉換為八進制數,需要先將二進制數轉換為10進制,然后將10進制數轉換為八進制
這種轉換方式有點麻煩,如果不是很大的數字,可以看下一章,快速轉換
快速轉換進制的方法
快速轉換可以通過查表的方式快速轉換
| 十進制 | 二進制 | 八進制 | 十六進制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | - | 8 |
| 9 | 1001 | - | 9 |
| 10 | 1010 | - | A |
| 11 | 1011 | - | B |
| 12 | 1100 | - | C |
| 13 | 1101 | - | D |
| 14 | 1110 | - | E |
| 15 | 1111 | - | F |
在這個表格中,每個進制的數字都有對應的二進制、八進制、十進制、十六進制數,例如,十進制數2對應二進制數10,八進制數2和十六進制數2都是用數字2來表示,十六進制數F對應二進制數1111,使用這個表格可以快速地進行不同進制之間的轉換,
這種方式對于二進制、八進制、十六進制之間的轉換非常有效
例如 將二進制數10101轉換為十六進制
- 首先一個十六進制數最多表示4位進制數
- 從低位取4位二進制數 0101 在16進制下沒有發現該數字,將高位的0去掉 得到 101,查到16進制數5
- 繼續從低位再取4位,發現只有1了,那它的16進制數就是1
- 從低位到高位組合16進制數 得到 15
進制加減法
還記得小學我們學的十進制加減法不,即滿十進一法.
其實對于二進制,八進制,16進制數可分別對應滿二進一,滿八進一,滿16進一.
請參考 16進制加減法
二進制計算符號位溢位問題
學習該章首先要明確的點
- 計算機中的位,表示的是CPU的尋址空間大小
- 計算機中二進制(原碼)數字的首位為符號位,0表示正數,1表示負數
- 這里也可以理解為數字表示的最大二進制位數
首先假如我們在一個字長為8位的計算機中進行運算 5 + 7
將它們轉換為2進制運算 00000101 + 00000111 = 00001100
00001100 = 12
那假如是 -5 + -7 呢
轉換為二進制運算就是,10000101 + 10000111 = 100001100
100001100 計算出來的二進制數變成了9位,8位下的計算計算機咋能表示9位呢,那把首位的1去掉就變成了00001100 = 12
額,為啥 兩個負數相加咋變成正數了,計算機是不是傻了,我們下節繼續
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552632.html
標籤:其他
下一篇:返回列表
