當你准備好的時候,死神是不會到來的。哈撒韋。
本文主要介紹進制的表示以及不同進制之間的轉換。
常用的進制
十進制
十進制是日常生活和工作中最常用的進位計數制。在十進制中每一位有 0~9 十個數碼,計數的基數是10。超過9的數必須用多位數表示,中低位和相鄰高位的關系是“逢十進一”。
對於任意一個十進制數\(D\)可以表示為
式中\(k_i\)是第\(i\)位的系數,取值可以是\(0\sim 9\)中的任意一個。如果整數部分的位數是\(n\),小數部分的位數是\(m\),則\(i\)包含從\(n-1\)到\(0\)的所有正整數和從\(-1\)到\(-m\)的所有負整數。
舉個例子:
十進制有的時候用\(D(Decimal)\)下標或者下標\((\cdot)_{10}\)來表示。
二進制
目前在數字電路中應用最廣泛的是二進制。二進制數中,每一位僅有和兩個可能的數碼,所以計數基數為。低位和相鄰高位間的進位關系是“逢二進一”。
對於任意一個二進制數\(D\)來說,可以用十進制表示為
式中\(k_i\)是第\(i\)位的系數,取值只能是\(0\)或\(1\)。如果整數部分的位數是\(n\),小數部分的位數是\(m\),則\(i\)包含從\(n-1\)到\(0\)的所有正整數和從\(-1\)到\(-m\)的所有負整數。
舉個例子:
二進制有的時候用下標\(B(Binary)\)或者下標\((.)_{2}\)來表示。
八進制
八進制中,數字的每一位有\(0 \sim 7\)八個不同的數碼,計數的基數為\(8\)。低位和相鄰的高位之間的進位關系是”逢八進一“。
任意一個八進制數可以按十進制數展開為
式中\(k_i\)是第\(i\)位的系數,取值可以是\(0 \sim 7\)中的任意一個。如果整數部分的位數是\(n\),小數部分的位數是\(m\),則\(i\)包含從\(n-1\)到\(0\)的所有正整數和從\(-1\)到\(-m\)的所有負整數。
舉個例子:
八進制有的時候用\(O(Octal)\)下標或者下標\((.)_{8}\)來表示。
十六進制
十六進制數的每一位有十六個不同的數碼,分別用\(0 \sim 9\),\(A(10)\),\(B(11)\),\(C(12)\),\(D(13)\),\(E(14)\),\(F(15)\)表示,計數的基數是\(16\)。低位和相鄰的高位之間的進位關系是"逢十六進一"。
任意一個十六進制數可以按照十六進制數展開為
例如:
十六進制有的時候用下標\(H(Hexadecimal)\)或者下標\((.)_{16}\)來表示。
十六進制數在計算機中應用廣泛。目前在計算機中普遍采用8位,16位和,,32位二進制並行運算,而8位,16位和32位二進制數可以用2位,4位和8位的十六進制數表示,因而用十六進制符號書寫程序非常簡便。
進制之間的轉換
二進制轉十進制,八進制轉十進制,十六進制轉十進制
對於二進制,八進制,十六進制轉成十進制,就像上面公式里那樣,各位按十進制加權求和就可以轉換成。
\(N\)指的是進制數,也被稱為計數的基數,當二進制時,\(N=2\),當八進制時,\(N=8\),當十六進制時,\(N=16\)。\(k_i\)是第\(i\)位的系數,\(N_i\)稱為第\(i\)位的權。
比如對於二進制數\((1011.01)_2\)來說,將各項的數值按十進制數相加
十進制轉二進制
十進制轉二進制從整數部分轉換和小數部分轉換兩個部分討論。
整數部分
假定十進制整數為\((S)_{10}\),等值的二進制數為\((k_nk_{n-1}k_{n-2}\cdots k_0)\),根據二進制數展開為十進制數的公式可以得到
如果將\((S)_{10}\)除以\(2\),則得到的商為\(k_n 2^{n-1} + k_{n-1}2^{n-2} + \cdots +k_1\),余數為\(k_0\)。
同樣的道理,除於\(2\)得到的商也可以寫成
則如果將\((S)_{10}\)除以得到的商再次除以\(2\),則所得余數即\(k_1\)。以此類推,如果反復將除於2后得到的商再次除於2,就可以得到轉換后的二進制數的每一位。
以下以\((173)_{10}\)轉化為二進制數作為例子
所以\((173)_{10} = (10101101)_2\)。
注意:從上面的過程中可以看出,最先得到的余數是\(k_0\),即轉換后二進制數的最低位,所以在進行上面除二操作時,要將余數進行倒序排列。
小數部分
假設\((S)_{10}\)是一個十進制的小數,對應的二進制小數為\((0.k_{-1}k_{-2}\cdots k_{-m})_2\),則按照二進制展開成十進制的公式可以寫成
將上式兩邊同時乘上2可以得到
上式說明將小數\((S)_{10}\)乘以2所得乘積的整數部分為\(k_{-1}\)。
即乘積的整數部分是\(k_{-2}\)
以此類推,將每次乘2后所得乘積的小數部分再乘以2,便可求出轉換后二進制小數的每一位。
以\((0.8125)_{10}\)化成二進制小數為例
所以\((0.8125)_{10} = (0.1101)_2\)。
注意:第一次乘2操作得到的整數是\(k_{-1}\),即轉換后二進制小數的最高位,所以在進行十進制小數轉換為二進制小數的時候,乘二后的整數部分正序排列。
二進制與八進制
二進制轉八進制
在將二進制數轉換為八進制數時,只要將二進制數的整數部分從低位到高位每三位分成一組並代之以等值的八進制數就可以。二進制數最高一組不足3位或者小數部分最低一組不足3位時,仍需用0補足3位。
八進制轉二進制
如果將八進制數轉換為二進制數,則只要將八進制數的每一位代之以等價的二進制數即可。
二進制與十六進制
二進制轉十六進制
由於4位二進制數恰好有16個狀態,而把這4位二進制數看作一個整體時,它的進位輸出有正好是逢十六進一,所以只要從低位到高位將整數部分每4位二進制數分成一組並代之以等值的十六進制數,同時從高位到低位將小數部分的每位數分成一組並代之以等值的十六進制數,即可得到對應的十六進制數。
注意:如果二進制數整數部分最高一組不足4位時,用0不足4位,如果小數部分最低一組不足4位時,也需用0補足4位。
十六進制轉二進制
轉換時只需將十六進制數的每一位用等值的4位二進制數代替即可。
十六進制轉十進制
十六進制轉十進制只需要按照公式展開即可,十進制轉十六進制,可以先將十進制轉成二進制,再將二進制轉成十六進制。