一文带你读懂计算机进制
hi,大家好,我是開發者FTD。在我們的學習和工作中少不了與進制打交道,從出生開始上學,最早接觸的就是十進制,當大家學習和使用計算機時候,我們又接觸到了二進制、八進制以及十六進制。那么大家對進制的認識和使用是否很清楚呢?今天我就帶大家一起深入了解一下計算機中的進制。
進制簡介
進位制其實是一種記數的方式,所以也稱為進位記數法/位值計數法,可以用有限的數字符號代表所有的數值。可使用數字符號的數目稱為基數(英文:radix)或底數,基數為n,即可稱n進位制,簡稱n進制。例如平常生活中我們經常用到的十進制,就是使用10個阿拉伯數字0-9進行記數,所以它的基數就是10,稱為十進制。
在計算機的世界里,計算機語言就是二進制,計算機能直接識別二進制數據,其它數據都不能直接識別。
對于任何一個數,我們可以用不同的進位制來表示,他們是等價的,只是表示形式不同而已。
例如:對于十進制數 2021,分別用不同機制表示如下:
- 十進制表示為:
2021102021_{10} 202110?
- 二進制表示為::
11111100101211111100101_{2} 111111001012?
- 八進制表示為:
374583745_{8} 37458?
- 十六進制表示為:
7e5167e5_{16} 7e516?
右下標數字代表了是幾進制,雖然表示形式不同,不過它們所代表的數值都是一樣的,均為2021。
常用的進制
大家都知道,計算機是由二進制組成的,除了我們最常用的十進制外,計算機中常用的進制有二進制、八進制和十六進制。下面我們就分別介紹一下。
十進制
十進制是大家最容易理解的進制,由于有一些天然的因素,比如我們的雙手總共有十根手指,所以在人類自發采用的進位制中,就很自然的使用了十進制作為主流的計數方法,而且大部分人從小接受的教育都是掌握十進制的計數方法,所以十進制幾乎已經深深的烙印在我們的腦海中了。
十進制有10個基本數字,分別為 0、1、2、3、4、5、6、7、8、9,十進制的基數為10,運算規則為”逢十進一”;
十進制的表示方法有兩種,使用下標或者后綴D,例如:
2021102021_{10} 202110?
或者在數字后面加上后綴D,如: 2021D
當然由于十進制在日常生活中非常普遍,通常我們可以直接使用數字來表示,默認就是十進制數。
二進制
二進制由于表示簡單,運算簡單等特點,是計算機技術中廣泛采用的一種數制,二進制由兩個基本數字組成,分別為0、1,運算規則為”逢二進一”。
為了區別于其他進制,二進制的表示方法也有兩種,使用下標或后綴B,例如:
11111100101211111100101_{2} 111111001012?
或者在數字后面加上后綴B,如:11111100101B
二進制的特點有:
二進制數中只有兩個數碼0和1,可用具有兩個不同穩定狀態的元器件來表示一位數碼。
二進制數運算簡單,大大簡化了計算中運算部件的結構。
二進制天然兼容邏輯運算。
八進制
八進制有8個基本數字,分別為0、1、2、3、4、5、6、7,運算規則為”逢八進一”。
由于二進制數據的基數R較小,所以二進制數據的書寫和閱讀不方便,為此,在小型機中引入了八進制。八進制的基數n=8=2^3,并且每個數碼正好對應三位二進制數,所以八進制能很好地反映二進制。
八進制也有兩種表示方法,使用下標或后綴O,例如:
374583745_{8} 37458?
或者在數字后面加上后綴O,如:3745O
另外一個八進制數,可以用3個二進制數來表示。例如:
37458=01111110010123745_{8} = 011111100101_{2} 37458?=0111111001012?
十六進制
十六進制的引入同樣是因為二進制數在實際使用中因為位數太長,不容易記憶才提出了十六進制數。
十六進制有16個基本數字,分別為0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,運算規則為”逢十六進一”。
十六進制有兩種表示方法,使用下標或后綴H,例如:
7e5167e5_{16} 7e516?
或者在數字后面加上后綴H,例如:7e5H
一個十六進制數,可以用4位二進制數來表示。例如:
7e516=01111110010127e5_{16} = 011111100101_{2} 7e516?=0111111001012?
補充小知識-進制的中英文表示:
-
Binary - 二進制
-
Octal - 八進制
-
Hexadecimal - 十六進制
-
Decimal - 十進制
看完之后是不是知道后綴的字母是什么含義了吧
下面這個表格有助于我們理解各個進制之間的關系:
| 2進制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
| 8進制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
| 16進制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
進制轉換
我們在上面了解了常用的進制,后面在實際工作中我們可能會在不同的場景下用到不同的進制表示,這就涉及到進制的轉換了,那么我們介紹一下常用的進制是如何進行轉換的。
1、二進制與十進制之間的轉換
十進制轉二進制
計算方法:十進制數除2取余法,即十進制數除2,余數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。最后讀數時,從最后一位讀起。
例如:
十進制數:2021 轉二進制后,二進制數為: 11111100101B
計算過程如下:
| 第1次 | 2021 / 2 | 1010 | 1 |
| 第2次 | 1010 / 2 | 505 | 0 |
| 第3次 | 505 / 2 | 252 | 1 |
| 第4次 | 252 / 2 | 126 | 0 |
| 第5次 | 126 / 2 | 63 | 0 |
| 第6次 | 63 / 2 | 31 | 1 |
| 第7次 | 31 / 2 | 15 | 1 |
| 第8次 | 15 / 2 | 7 | 1 |
| 第9次 | 7 / 2 | 3 | 1 |
| 第10次 | 3 / 2 | 1 | 1 |
| 第11次 | 1 / 2 | 0 | 1 |
計算完成后,從最后一位讀起,最后結果為:11111100101B
二進制轉十進制
計算方法為:把二進制數按權展開,相加既得十進制數。
例如:
二進制數:11111100101B 轉十進制后,十進制數為: 2021
計算過程如下:
| 位數 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 公式 | 2^10 | 2^9 | 2^8 | 2^7 | 2^6 | 2^5 | 0 * 2^4 | 0 * 2^3 | 2^2 | 0 * 2^1 | 2^0 |
| 結果 | 1024 | 512 | 256 | 128 | 64 | 32 | 0 | 0 | 4 | 0 | 1 |
最后將每一位計算結果相加,即
210+29+28+27+26+25+(0?24)+(0?23)+22+(0?21)+20=1024+512+256+128+64+32+0+0+4+0+1=20212^{10} + 2^9 + 2^8 + 2^7 + 2^6 + 2^5 + (0*2^4) + (0*2^3) + 2^2 + (0*2^1) + 2^0 = 1024 + 512+256+128+64+32+0+0+4+0+1 = 2021 210+29+28+27+26+25+(0?24)+(0?23)+22+(0?21)+20=1024+512+256+128+64+32+0+0+4+0+1=2021
最后計算結果為:2021
2、二進制與十六進制之間的轉換
十六進制轉二進制
計算方法:十六進制數通過除2取余法,得到二進制數,對每個十六進制數為4個二進制數,不足時在最左邊補領。
例如:
十六進制數:7e5H 轉二進制后,二進制數為:011111100101B
計算過程如下:
首先,將十六進制7e5數分成三部分7、e、5,分別做除2取余:
| 第1次 | 7 / 2 | 3 | 1 |
| 第2次 | 3 / 2 | 1 | 1 |
| 第3次 | 1 / 2 | 0 | 1 |
7 轉換為二進制數得 0111,不足四位,前面補零。
| 第1次 | 14 / 2 | 7 | 0 |
| 第2次 | 7 / 2 | 3 | 1 |
| 第3次 | 3 / 2 | 1 | 1 |
| 第4次 | 1 / 2 | 0 | 1 |
e 轉換為二進制為:1110
| 第1次 | 5 / 2 | 2 | 1 |
| 第2次 | 2 / 2 | 1 | 0 |
| 第3次 | 1 / 2 | 0 | 1 |
5 轉換為二進制為:0101,不足四位,前面補零。
最后計算結果為:011111100101B
二進制轉十六進制
計算方法:4位二進制數按權展開相加得到1位十六進制數。注意,4位二進制數轉成十六進制數是從右到左開始轉換,不足時補0。
例如:
二進制數:011111100101B 轉十六進制后,十六進制數為: 7e5H
計算過程如下:
首先將二進制數按每4位進行分隔,得到 0111,1110,0101,然后分別計算十六進制數
| 位數 | 3 | 2 | 1 | 0 |
| 公式 | 0 * 2^3 | 2^2 | 2^1 | 2^0 |
| 結果 | 0 | 4 | 2 | 1 |
0?23+22+21+20=0+4+2+4=70 * 2^3 + 2^2 + 2^1 + 2^0 = 0+4+2+4=7 0?23+22+21+20=0+4+2+4=7
0111 轉換為十六進制為 7
| 位數 | 3 | 2 | 1 | 0 |
| 公式 | 2^3 | 2^2 | 2^1 | 0 * 2^0 |
| 結果 | 8 | 4 | 2 | 0 |
23+22+21+0?20=8+4+2+0=142^3 + 2^2 + 2^1 + 0 *2^0 = 8+4+2+0=14 23+22+21+0?20=8+4+2+0=14
0111 轉換為十六進制為 e
| 位數 | 3 | 2 | 1 | 0 |
| 公式 | 0 * 2^3 | 2^2 | 0 * 2^1 | 2^0 |
| 結果 | 0 | 4 | 0 | 1 |
0?23+22+0?21+20=0+4+0+1=50 * 2^3 + 2^2 + 0 * 2^1 + 2^0 = 0+4+0+1=5 0?23+22+0?21+20=0+4+0+1=5
0101 轉換為十六進制為 5
最后計算結果為:7e5H
3、十進制與十六進制之間的轉換
十六進制轉十進制
計算方法為:把十六進制數按權展開,相加既得十進制數。
例如:
十六進制數:7e5H 轉十進制后,十進制數為: 2021
計算過程如下:
| 位數 | 2 | 1 | 0 |
| 公式 | 7 * 16^2 | 14 * 16^1 | 5 * 16^0 |
| 結果 | 1792 | 224 | 5 |
7?162+14?161+5?160=1792+224+5=20217 * 16^2 + 14 * 16^1 + 5 * 16^0 = 1792 + 224 + 5 = 2021 7?162+14?161+5?160=1792+224+5=2021
最后計算結果為:2021
十進制轉十六進制
計算方法:十進制數除8取余法,即十進制數除8,余數為權位上的數,得到的商值繼續除8,依此步驟繼續向下運算直到商為0為止。最后讀數時,從最后一位讀起。
例如:
十進制數: 2021 轉十六進制后,十六進制數為: 7e5H
計算過程如下:
| 第1次 | 2021 / 16 | 126 | 5 |
| 第2次 | 126 / 16 | 7 | 14 |
| 第3次 | 7 / 16 | 0 | 7 |
計算完成后,從最后一位讀起,最后結果為:7e5H
總結
通過上面的介紹和例子,相信大家已經對進制有了深刻的認識和理解,一旦你搞懂他們之間的關系,將對我們在工作中遇到的很多疑問就會迎刃而解,也讓我們在處理問題上變的更游刃有余。希望上面的講解能對大家有所幫助,如果有任何這些方面的疑問,歡迎留言騷擾。
技術人,技術魂,每天肝一篇技術文,ヾ(?°?°?)ノ゙哈哈~
關于作者
- GitHub:https://github.com/ForTheDevelopers
- 掘金:https://juejin.cn/user/1204720472953022
- CSDN:https://blog.csdn.net/ForTheDevelopers
- 知乎:https://www.zhihu.com/people/forthedevelopers
- segmentfault:https://segmentfault.com/u/for_the_developers
聯系作者
- 微信號:ForTheDeveloper
- 公眾號:ForTheDevelopers
總結
以上是生活随笔為你收集整理的一文带你读懂计算机进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PID控制器改进笔记之六:改进PID控制
- 下一篇: win10用Eclipse+OpenJT