一文搞懂:二進制、八進制、十進制、十六進制和X進制的互相轉換

什麼是進制?

進制也就是進位制,是人們規定的一種進位方法。 對於任何一種進制—X進制,就表示某一位置上的數運算時是逢X進一位。 十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,

x進制就是逢x進位

1、常用進制以及應用場景

1.1、二進制(Binary,簡寫為B)

二進制是計算技術中廣泛採用的一種數制。二進制數據是用0和1兩個數碼來表示的數。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用“開”來表示1,“關”來表示0。如果對計算機原碼、補碼、反碼以及運算不明白的請參考我的上篇博客

1.2、八進制(Octal,簡寫為O)

關於八進制的應用場景,我能想到的就是Linux的權限了。比如:某一個文件類型與權限表示為:-rwxr-xr–第一個字符代表文件(-)、目錄(d),鏈接(l)其餘字符每3個一組(rwx),讀r(4)、寫w(2)、執行x(1)第一組為文件所有者權限:如上rwx:文件所有者的權限是讀、寫和執行第二組為與文件所有者同一組的用戶的權限:如上r-x:有可讀和執行的權限但是沒有寫權限第三組為不與文件所有者同組的其他用戶的權限:如上r–:只有可讀權限了另外補充一下我們經常用的改變權限的命令:chgrp:改變文件所屬用戶組 chown:改變文件所有者 chmod:改變文件的權限。呀!!!!跑偏了!!!回到重點!!!!!!

1.3、十進制(Decimal,簡寫為D)

這個不用多說,便於我們使用!

1.4、十六進制(Hexadecimal,簡寫為H)

我們編程中內存地址空間是用十六進制表示的由於二進制數在使用中位數太長,不容易記憶,所以提出了十六進制數它由十六個字符0~9以及A,B,C,D,E,F組成

2、進制轉換

2.1、十進制轉換

二進制–>十進制 方法:二進制數從低位到高位(即從右往左)計算,第0位的權值是2的0次方,第1位的權值是2的1次方,第2位的權值是2的2次方,依次遞增下去,把最後的結果相加的值就是十進制的值了。1010(B)1×2^3+0×2^2+1×2^1+0×2^0=10

八進制–>十進制方法:八進制數從低位到高位(即從右往左)計算,第0位的權值是8的0次方,第1位的權值是8的1次方,第2位的權值是8的2次方,依次遞增下去,把最後的結果相加的值就是十進制的值了。1010(O)1×8^3+0×8^2+1×8^1+0×8^0=520

十六進制–>十進制 方法:十六進制數從低位到高位(即從右往左)計算,第0位的權值是16的0次方,第1位的權值是16的1次方,第2位的權值是16的2次方,依次遞增下去,把最後的結果相加的值就是十進制的值了。1010(H)1×16^3+0×16^2+1×16^1+0×16^0=4112

2.2、二進制轉換

八進制–>二進制方法:取一分三法,即將一位八進制數分解成三位二進制數,用三位二進制按權相加去湊這位八進制數,小數點位置照舊。

106(O)

1拆成001

0拆成000

6拆成110

轉換後的二進制為:001 000 110

十進制–>二進制 方法:除2取餘法,即每次將整數部分除以2,餘數為該位權上的數,而商繼續除以2,餘數又為上一個位權上的數,這個步驟一直持續下去,直到商為0為止,最後讀數時候,從最後一個餘數讀起,一直到最前面的一個餘數。

106(D)

1、106 ÷ 2 = 53 ……0

2、53 ÷ 2 = 26 ……1

3、26 ÷ 2 = 13 …….0

4、13 ÷ 2 = 6 ……1

5、6 ÷ 2 = 3 ……..0

6、3 ÷ 2 = 1 ……..1

7、1÷ 2 = 0 ……….1

所以轉換後的二進制數為:1101010

十六進制–>二進制

方法:取一分四法,即將一位十六進制數分解成四位二進制數,用四位二進制按權相加去湊這位十六進制數,小數點位置照舊。

106(H)

1拆成0001

0拆成0000

6拆成0110

轉化成二進制為:0001 0000 0110

2.3、八進制轉換

二進制–>八進制 方法:取三合一法,即從二進制的小數點為分界點,向左(向右)每三位取成一位,接著將這三位二進制按權相加,然後,按順序進行排列,小數點的位置不變,得到的數字就是我們所求的八進制數。如果向左(向右)取三位後,取到最高(最低)位時候,如果無法湊足三位,可以在小數點最左邊(最右邊),即整數的最高位(最低位)添0,湊足三位。

11010111.0100111(B)

1、小數點前111 = 7;

2、010 = 2;

3、11補全為011,011 = 3;

4、小數點後010 = 2;

5、011 = 3;

6、1補全為100,100 = 4;

7、讀數,讀數從高位到低位,即(11010111.0100111)B=(327.234)O。

十進制–>八進制

方法1:除8取餘法,即每次將整數部分除以8,餘數為該位權上的數,而商繼續除以8,餘數又為上一個位權上的數,這個步驟一直持續下去,直到商為0為止,最後讀數時候,從最後一個餘數起,一直到最前面的一個餘數。

106(D)

1、106 ÷ 8 = 13 ……2

2、13 ÷ 8 = 1 ……5

3、1 ÷ 8 = 0 ……1

即轉化為八進制為:152(O)

方法2:使用間接法,先將十進制轉換成二進制,然後將二進制又轉換成八進制;

十六進制–>八進制 方法:將十六進制轉換為二進制,然後再將二進制轉換為八進制,小數點位置不變。106(H)先轉換為二進制:上面已經講過,結果為:轉化成二進制為:0001 0000 0110二進制轉化為八進制:上面已經講過,結果為:轉化為八進制為:406(O)

2.4十六進制

二進制–>十六進制 方法:取四合一法,即從二進制的小數點為分界點,向左(向右)每四位取成一位,接著將這四位二進制按權相加,然後,按順序進行排列,小數點的位置不變,得到的數字就是我們所求的十六進制數。如果向左(向右)取四位後,取到最高(最低)位時候,如果無法湊足四位,可以在小數點最左邊(最右邊),即整數的最高位(最低位)添0,湊足四位。

11010111(B)

1、0111 = 7

2、1101 = D

所以轉換結果為:D7

八進制–>十六進制

方法:將八進制轉換為二進制,然後再將二進制轉換為十六進制,小數點位置不變。

106(O)

1、八進制–>二進制上面已經講過,所以結果為:001 000 110

2、二進制–>十六進制0110 = 61000 = 8

所以結果為86(H)

十進制–>十六進制 方法1:除16取餘法,即每次將整數部分除以16,餘數為該位權上的數,而商繼續除以16,餘數又為上一個位權上的數,這個步驟一直持續下去,直到商為0為止,最後讀數時候,從最後一個餘數起,一直到最前面的一個餘數。

106(D)

1、106 ÷ 16 = 6 ……10(A)

2、6 ÷ 16 = 0 …….6

所以轉換結果為6A(H)

方法2:使用間接法,先將十進制轉換成二進制,然後將二進制又轉換成十六進制;上面已經講過,這裡不再說了!

3、定義表

  • 二進制:0 1
  • 八進制:0 1 2 3 4 5 6 7
  • 十進制:0 1 2 3 4 5 6 7 8 9
  • 十六進制:0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15)
  • 三十二進制:0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15) G(16) H(17) J(18) K(19) L(20) M(21) N(22) P(23) Q(24) R(25) T(26) U(27) V(28) W(29) X(30) Y(31) (26個字母中去除【I、O、S、Z】,也可以用小寫字母)
  • 六十四進制:0 1 2 3 4 5 6 7 8 9 a(10) b(11) c(12) d(13) e(14) f(15) g(16) h(17) i(18) j(19) k(20) l(21) m(22) n(23) o(24) p(25) q(26) r(27) s(28) t(29) u(30) v(31) w(32) x(33) y(34) z(35) A(36) B(37) C(38) D(39) E(40) F(41) G(42) H(43) I(44) J(45) K(46) L(47) M(48) N(49) O(50) P(51) Q(52) R(53) S(54) T(55) U(56) V(57) W(58) X(59) Y(60) Z(61) +(62) /(63)

4、X進制與十進制的轉換

X進制轉十進制:X進制數從低位到高位(即從右往左)計算,第0位的權值是X的0次方,第1位的權值是X的1次方,第2位的權值是X的2次方,依次遞增下去,把最後的結果相加的值就是十進制的值了。

十進制轉X進制:除X取餘法,即每次將整數部分除以X,餘數為該位權上的數,而商繼續除以X,餘數又為上一個位權上的數,這個步驟一直持續下去,直到商為0為止,最後讀數時候,從最後一個餘數起,一直到最前面的一個餘數。


分享到:


相關文章: