2021-08-29 C語言之進制轉換詳解


1、二進制用數字0,1表示,原則是逢二進一,十進制數進位原則是逢十進一,此外計算機常用的還有八進制數,十六進制數。

不同數值之間的轉換依據就是:不同數制的每一位所對應的權值不同。

解釋一下什么是權值:

權值就是處在某一位上的“1”所表示的數值的大小,稱為該位的位權。

比如,1010(2)表示一個二進制數,它的每一位的權值從右往左依次遞增,最右邊的數字0,在這個數的第0位,所以該位的權值是20

這里強調一下:在數一個數的某一位時,從右往左依次是第0,1,2,3.…位。要從0開始數。這個數在第幾位,它的權值就是幾次冪。

從右往左數第二個數字是1,但是它不是第二位,它是第1位,所以它的權值是21

所以1010(2)這個二進制數轉換為十進制數就是每一位上的數乘以他們所對應的權值:0*20+1*21+0*22+1*23=10(10)

所以1010(2)這個二進制數用十進制數表示就是10。

還有就是二進制小數的轉換,比如10.1010(2)轉換為十進制數:10.1010(2)=1*21+1*2-1+1*2-3=2.625(10)

這里要注意小數部分的權值與整數部分不同,以二進制為例,小數部分從左往右依次是(從1開始)第一位、第二位…那么每一位所對應的的權值是2-1

第二位是2-2……

2、八進制數:它的權值:第0位是80,第1位是81,……

比如一個八進制數:567(8),它轉換為十進制數是:7*80+6*81+5*82=375

八進制小數的轉換,同二進制。

3、十六進制數:它的權值:第0位是160,第1位是161,……

十六進制因為某一位的最大數值可以是15,但是在某一位上又不可能用2位數表示,所以(習慣上)用大寫英文字母A~F表示從10~15這六個2位數。

即:A=10 , B=11 , C=12 , D=13 , E=14 , F=15。

比如一個十六進制數:4F5,轉換為十進制數為:4F5=5*160+F*161+4*162=1269(10)

十六進制小數的轉換,同二進制。比如90.1(16)=9*161+1*16-1=144.0625(10)

以上是二、八、十六進制----->十進制。

4、那么十進制數----->二、八、十六進制數,接下來介紹。

十進制數轉換為二進制數時,由於整數和小數轉換方法不同,所以要把十進制數的整數和小數部分分別轉換后加以合並。

十進制整數轉二進制數采用:除2取余,逆序排列。將要轉換的數除以2,得到商和余數,繼續把商除以2,直到商為0,最后將余數逆序排列。

十進制小數轉二進制數采用:乘2取整,正序排列。將要轉換的小數乘以2,取出積的整數部分,再用余下的小數繼續乘以2,再取出積的整數部分,這樣進行到積的小數部分為0,或達到所要求的精度為止。

有些十進制小數無法用二進制精確的表達,轉化時符合一定的精度即可,這是計算機浮點數運算不准確的原因。

十進制轉換八進制同上。

十進制轉換十六進制同上。

5、快速轉換法,利用8421碼:只適用於二、八、十六進制之間的轉換。

二進制快速轉換為八進制數:101(2)從右往左依次對應8421碼的后三位1、2、4,因為4+2+1=7,正好是八進制數位的最大值7,所以每3位二進制表示一位八進制數。所以多位二進制數在轉換時要從右往左,3位一組,最后如果不夠3位補0即可。

如果二進制位某位的數值為1,則對應該位的8421碼數值相加,如果二進制位某位的數值為0,則對應該位的8421碼等於0,不用加。

101(2)=1+4=5(8)

二進制快速轉換為十六進制數:1101(2)從右往左依次對應8421碼的1、2、4、8,因為8421碼4位數相加:1+2+4+8=15,正好對應十六進制數位上的最大值15,所以每4位二進制數表示一位十六進制數。所以多位二進制數在轉換時要從右往左,4位一組,最后如果不夠4位補0即可。

1101(2)=1+4+8=13=D(16)

相反的,利用8421碼也可以完成對八、十六進制轉換二進制的快速轉換。

特別的:

如果一個八進制數要轉換為十六進制數,不能直接轉換,要先把八進制數轉為二進制,再由二進制轉為十六進制。

如果一個十六進制數要轉換為八進制數,不能直接轉換,要先把十六進制數轉為二進制,再由二進制轉為八進制。

end.


免責聲明!

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



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