2、進制詳解(整數部分)


概念:什么是進制

  • 我們平時使用的數字都是由 0~9 共十個數字組成的,例如 1、9、10、297、952 等,一個數字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多個數字組合起來。
    例如表示 5+8 的結果,一個數字不夠,只能”進位“,用 13 來表示;這時”進一位“相當於十,”進兩位“相當於二十。

  • 因為逢十進一(滿十進一),也因為只有 0~9 共十個數字,所以叫做十進制(Decimalism)。十進制是在人類社會發展過程中自然形成的,它符合人們的思維習慣,例如人類有十根手指,也有十根腳趾。

  • 學習進制,必須首先掌握數碼、基數、位權這三個概念。

    數碼:數制中表示基本數值大小的不同數字符號
    例如,十進制有10個數碼: 0、1、2、3、4、5、6、7、8、9。

    基數:數制所使用數碼的個數
    例如,二進制有兩個數碼:0、1所以它的基數為2;十進制使用10個數碼,它的基數為10。N進制的基數為N

    位權:
    官方說法:數制中某一位上的1所表示數值的大小(數碼所處位置的價值)。若某數制的基數為 N,則第i位的位權為基數的i次方(Ni)
    例如,十進制數“795”,其個位數5的位權是100,十位數9的位權是101,百位數7的位權是102。
    通俗說法:
    1、在各種數制(無論是二進制,十進制、十六進制等)中,各位數字所表示值的大小不僅與該數字本身的大小有關,還與該數字所在的位置有關,我們稱這關系為數的位權。
    2、拿十進制做個不科學但最通俗的比喻,不能說4一定比2大,還要看它在整個數中的位置。如:40中的4代表的值比200中的2所代表的值要小。

    一個二進制數110,其中高位的1表示1個2x2,即4,低位的1表示1個2x1,即2,最低位的0表示0個2x0,即0。
    可見,在數制中,各位數字所表示值的大小不僅與該數字本身的大小有關,還與該數字所在的位置有關,我們稱這關系為數的位權。 二進制數的位權是以2為底的冪...
    所以110按照權展開就是110=2x2x1+2x1x1+2x0x0
    權值=當前數值xN進制的"位置"冪。權位都是從右往左開始的,第一位從0開始。

  • 進制也就是進位制。進行加法運算時逢X進一(滿X進一),進行減法運算時借一當X,這就是X進制,這種進制也就包含X個數字,基數為X。十進制有 0~9 共10個數字,基數為10,在加減法運算中,逢十進一,借一當十。

    常用的進制有:二進制、八進制、十進制、十六進制。剛剛已經介紹過了十進制,下面來講解其他進制。

一、常見的進制

1、二進制

用0、1兩個數字來表示數值,這就是二進制(Binary)。例如,數字 0、1、10、111、100、1000001 都是有效的二進制。在計算機內部,數據都是以二進制的形式存儲的。

2、八進制

八進制有 0~7 共8個數字,例如,數字 0、1、5、7、14、733、67001、25430 都是有效的八進制。

3、十六進制

除了二進制和八進制,十六進制也經常使用,甚至比八進制還要頻繁。

十六進制中,用A來表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16個數字,基數為16。例如,數字 0、1、6、9、A、D、F、419、EA32、80A3、BC00 都是有效的十六進制。

注意,十六進制中的字母不區分大小寫,ABCDEF 也可以寫作 abcdef。

二、進制加減法

1、二進制加減法

二進制加減法和十進制加減法的思想是類似的:

對於十進制,進行加法運算時逢十進一,進行減法運算時借一當十;
對於二進制,進行加法運算時逢二進一,進行減法運算時借一當二。

二進制的小數加減法同理

2、八進制加減法

八進制加法運算時逢八進一,減法運算時借一當八。

要點:如果當前位相加滿8,向高位進1,然后再減去8,就是當前位的和

八進制的小數加減法同理

3、十六進制加減法

十六進制加法運算時逢16進1,減法運算時借1當16。

**要點:如果當前位相加滿16,向高位進1,然后再減去16,就是當前位的和 **

十六進制的小數加減法同理

不同進制之間想要進行加法或者減法,都進行先轉換成二進制再進行運算

三、進制轉換

1、將二進制、八進制、十六進制轉換為十進制

二進制、八進制和十六進制向十進制轉換都非常容易,就是“按權相加”。所謂“權”,也即“位權”,第幾位數。

注意,這里我們需要以十進制形式來表示位權。

1) 整數部分

將二進制數字轉換成十進制

將八進制數字轉換成十進制

將十六進制數字轉換成十進制


2) 小數部分

將二進制小數轉換成十進制


將八進制小數轉換成十進制

十六進制小數轉換成十進制同理。

3) 總結

將N進制轉成十進制使用的方法是權位展開。

2、將十進制轉換為二進制、八進制、十六進制

將十進制轉換為其它進制時比較復雜,整數部分和小數部分的算法不一樣,下面我們分別講解。

1) 整數部分

十進制整數轉換為 N 進制整數采用“除 N 取余,逆序排列”法。具體做法是:

  • 將 N 作為除數,用十進制整數除以 N,可以得到一個商和余數;
  • 保留余數,用商繼續除以 N,又得到一個新的商和余數;
  • 仍然保留余數,用商繼續除以 N,還會得到一個新的商和余數;
  • ……
  • 如此反復進行,每次都保留余數,用商接着除以 N,直到商為 0 時為止。

把先得到的余數作為 N 進制數的低位數字,后得到的余數作為 N 進制數的高位數字,依次排列起來,就得到了 N 進制數字。

將十進制數字轉換成二進制

注意,當被除數為1時,1除以任何數,其余數都是1。

將十進制數字轉換成八進制

十進制的數字轉16進制同理

2) 小數部分

十進制小數轉換成 N 進制小數采用“乘 N 取整,順序排列”法。具體做法是:

  • 先將整數與小數進行分離,整數單獨進行轉換二進制數;
  • 用 N 乘以十進制的小數,可以得到一個積,這個積包含了整數部分和小數部分;
  • 將積的整數部分取出,再用 N 乘以余下的小數部分,又得到一個新的積;
  • 再將積的整數部分取出,繼續用 N 乘以余下的小數部分;
  • ……
  • 如此反復進行,每次都取出整數部分,用 N 接着乘以小數部分,直到積中的小數部分為 0,或者發現該操作會無限循環,那么達到所要求的精度為止。

把取出的整數部分按順序排列起來,先取出的整數作為 N 進制小數的高位數字,后取出的整數作為低位數字,這樣就得到了 N 進制小數。

如果一個數字既包含了整數部分又包含了小數部分,那么將整數部分和小數部分開,分別按照上面的方法完成轉換,然后再合並在一起即可。例如:

  • 十進制數字 36926.930908203125 轉換成八進制的結果為 110076.7345;
  • 十進制數字 42.6875 轉換成二進制的結果為 101010.1011。
將十進制小數轉換成二進制

將十進制小數轉換成八進制

十進制的小數轉16進制同理

3、二進制和八進制、十六進制的轉換

二進制轉換其他進制使用的是權位展開計算法

1) 二進制整數和八進制整數之間的轉換

2) 二進制整數和十六進制整數之間的轉換

4、總結

  • N進制轉換十進制使用的是權位展開。
  • 十進制轉換N進制使用的是除N取余。
  • N進制轉換Y進制,N進制可以通過進制對照表換算出每一位的二進制數,再通過二進制轉換成Y進制。

四、進制對應表

五、編碼

用代碼表示信息的過程稱為編碼。在數字系統中,由於二進制數用電路實現起來比較容易,因此在編碼中廣泛使用的是二進制數。我們稱用二進制數表示文字符號等信息的過程為二進制編碼。
常用的二進制編碼方法如下。

1、順序二進制編碼

將十進制數轉換成二進制數,所得到的二進制編碼就是順序二進制碼,簡稱二進制碼。其特點是相鄰的兩個數之間的差值為1。

2、獨熱碼

只有一個二進制位為1,其他全為0的編碼叫做獨熱碼,又稱一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都有它獨立的寄存器位,並且在任意時候,其中只有一位有效。即,只有一位是1,其余都是零值。這中編碼方式中,編碼的二進制位數與需要進行編碼的狀態數相等。

例如,對六個狀態進行編碼:

自然順序碼為 000,001,010,011,100,101
獨熱編碼則是 000001,000010,000100,001000,010000,100000

回到一開始的例子,性別特征:["男","女"],按照N位狀態寄存器來對N個狀態進行編碼的原理:

性別特征:["男","女"](這里N=2)
男 => 10
女 => 01

地區特征:["北京","上海,"深圳"](這里N=3):
北京 => 100
上海 => 010
深圳 => 001

工作特征:["演員","廚師","公務員","工程師","律師"](這里N=5):
演員 => 10000
廚師 => 01000
公務員 => 00100
工程師 => 00010
律師 => 00001

所以,樣本的特征是["女","北京","工程師"]的時候,獨熱編碼(One-Hot Encoding)的結果為:

[0,1,1,0,0,0,0,0,1,0]

3、二-十進制編碼(BCD碼)

  • 日常生活中最常使用的是十進制數。在數字系統中,為了既滿足系統中使用二進制數的要求,又適應人們使用十進制數的習慣,需要用二進制數來表示十進制數。即用4位二進制數,對十進制數中的10個數符進行編碼,簡稱二-十進制編碼,又稱BCD碼,有了BCD碼才有了后來的進制轉換

  • 二-十進制編碼有多種不同的編碼方法,也就是說有多種不同的BCD碼,常用的有8421碼、2421BCD碼、5211BCD碼、余3碼、余3格雷碼等。

  • 使用二進制來表示十進制的話,需要用到4位二進制,但是4位的二進制的組合又能表示出0~15(16個)十進制數。因此需要在二進制的16組合里面取出十個來表示0-9個十進制數。

  • 如何在二進制的16組合里面取出十個來表示0-9呢?實際上,我們可以從0000開始到1001結束作為選擇,也可以在其他地方進行選取,只要這十個二進制編碼互相不重復並且好記、好進行運算轉換為10進制就可以了。

    選擇1,這個是8421碼:為什么叫8421,因為按照位權來計算,從左往右依次是8,4,2,1。8421碼是最常用到的二進制轉換十進制的編碼。

選擇2,這個是5421碼:

按照位權來計算,從左往右依次是5,4,2,1。在選取二進制數的時候由於中間跳過了3位,所以它的最高位的位權由8變成了5,這個就是5421碼的由來。

5421碼的特點:高位互反,其他位上下兩邊對應。0000高位是0,其余低位是000,1000高位是1,其余低位是000,高位互反,其他位對應。

選擇3,這個是2421碼:

按照位權來計算,從左往右依次是2,4,2,1。在選取二進制數的時候由於中間跳過了6位,所以它的最高位的位權由8變成了2,這個就是2421碼的由來。

2421碼的特點:互反,第1個二進制數和最后1個二進制數是相反的。0000和1111互反,0001和1110互反...

選擇4,這個是余3碼:

余3碼在選取二進制數的時候,每一個二進制數都比順序碼(8421碼)多出3(8421碼+3),所以叫做余3碼。

余3碼也有上下互反的特點。

其中8421碼、2421碼、5211碼都屬於權位碼,即每1位對應一個權值,如8421碼中,各位的位權依次是8、4、2、1,將二進制1001轉換為十進制數是這樣的:8+0+0+1=9。

其他編碼就是無權碼,無權碼每位的權並不確定。因此不能用按權展開的方法來求它所代表的十進制數。無權碼在數字系統中不能進行數值運算。但是這些代碼都有其特點,在不同的場合可以根據需要選用。

4、格雷碼(余3循環碼)

順序二進制編碼簡單且容易切換,但在相鄰的兩個編碼之間,可能同時有多個二進制位發生變化,例如代碼0111變化為1000時,4個二進制位均發生了變化。在數字系統中,常常需要代碼按一定順序變化,但如果多個位同時發生變化,由於各個位變化在時間上的差異,往往會出現短暫的其他代碼,例如代碼0111變化為1000時,可能會出現短暫的1111或1011等,這有可能會導致嚴重的電路狀態錯誤。使用格雷碼可以避免這種錯誤的發生。

格雷碼又稱循環碼,它的主要特點是相鄰兩個編碼之間只有一個位不相同,在變化的時候,只會有一位數進行變化。列如:格雷碼0000->0001->0011,可以發現只有一位數有變化。

1、格雷碼具有以下3種特性:

  • 反射特效:16個格雷碼從中開始看,第7位格雷碼和第8位的格雷碼高1位是相反的,低3位數相同的。

  • 邏輯相鄰:格雷碼任意兩個相鄰的數只有一個位不相同,0000->0001->0011,可以發現只有一位數有變化。

  • 余3循環:將余3碼轉換成格雷碼則稱為余3循環碼,第1個二進制數0010和最后一個二進制數1010也是只有1位不同,所以就循環回來了。

2、二進制碼與格雷碼轉換

使用異或運算能夠很方便的計算出格雷碼,異或運算公式:0+0=0,0+1=1,1+1=0,由此可見只有加號兩邊不相等時結果才為1,相同為0。

在二進制碼轉換格雷碼的時候,二進制碼的最高位和格雷碼的最高位是相同的,其他位置是通過相鄰之間的數值異或運算計算出來的。

在格雷碼轉換二進制碼的時候,二進制碼的最高位和格雷碼的最高位是相同的,其他位置是通過左邊上次的異或運算結果和右邊的數值異或運算計算出來的。

5、ASCII字符集碼

除了數字數據外,計算機還必須能處理非數字信息。即計算機應能識別表示字母、標點符號和其他特殊符號以及數字的代碼。這些代碼叫做字符數字碼。一個完整的字符數字碼應包括26個小寫英文字母、26個大寫英文字母、10個數字符號、7個標點符號,以及其他20~40個特殊符號,如+、/、#、%、*等。也就是說,字符數字碼能表示計算機鍵盤上所看到的各種符號和功能鍵。

6、奇偶校驗碼(檢錯碼和糾錯碼)

檢錯碼:僅能檢測數字信號是否發生錯誤。

糾錯碼:能夠檢測並糾正數字信號中的錯誤

奇偶校驗碼是一種具有檢錯能力的代碼,它是在原代碼(稱為信息碼)的基礎上增加一個碼位(稱為校驗碼、校驗位或附加位),使代碼中含有的1的個數均為奇數(稱為奇校驗)或偶數(稱為偶校驗),這樣通過檢查代碼中含有的1的數目的奇偶性來判別代碼的合法性。顯然,信號在傳送過程中如果代碼有兩位出錯,則這種奇偶校驗法是無法檢測的,因為兩位出錯不會改變代碼中含1碼個數的奇偶性。所以,奇偶校驗碼僅適用於信號出錯率很低,且出現成對錯誤的概率基本為0的情況。


免責聲明!

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



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