這篇筆記咱主要寫一下二進制、八進制、十進制、十六進制之間的互相轉換,
Contents
- 十進制與其他進制的互相轉換
- 十進制 → 其他進制
- 整數部分
- <方法> 除以基數倒取余
- 小數部分
- <方法> 乘以基數順取整
- 整數部分
- 其他進制 → 十進制
- <方法> 乘以位權后求和
- 十進制 → 其他進制
- 二進制與其他進制的互相轉換
- 二進制 → 其他進制
- <方法> 幾位一讀,不足補零
- 其他進制 → 二進制
- <方法> 展開一位為多位
- 二進制 → 其他進制
- 十六進制與八進制的互相轉換
- <方法> 間接轉換
- 【例】八進制 → 十六進制
- 【例】十六進制 → 八進制
前言
通過觀察,我覺得二、八、十、十六進制數的互相轉換可以總結為三大塊:
- 十進制與其他進制互相轉換
- 二進制與其他進制互相轉換
- 十六進制與八進制的互相轉換
話不多說,下面就按這三大塊來歸納一下,
十進制與其他進制的互相轉換
十進制到其他進制
整數部分
?? 方法:除以基數倒取余
比如16進制,除以的基數就是16
-
“除以基數”指的是將十進制數不斷除以目標進制對應的基數,直到商為
0為止, -
“倒取余”指的是將每次相除得到的余數倒序排列,即轉換為了目標進制的數,
-
[例] 10進制轉換為8進制

圖中的紅色箭頭展示了“倒取余”的程序
圖中將十進制數
1145轉換為了八進制數2171 -
[例] 10進制轉換為16進制

圖中的紅色箭頭展示了“倒取余”的程序
圖中將十進制數
14191轉換為了十六進制數376F
小數部分
? 不是所有的小數都能轉換為其他進制,比如現代計算機采用二進制計數,有很多小數都沒法準確地轉換為二進制(只能取近似值),這也是為什么說現在計算機無法完全準確地表示小數,
?? 方法:乘以基數順取整
比如2進制,對應的基數就是2
-
“乘以基數”指的是不斷將小數部分乘以目標進制對應的基數,直到小數部分為
0為止, -
“順取整”指的是將每次相乘得到的數的整數部分順序排列,即轉換為了目標進制的數,
-
[例] 2進制轉換為10進制

圖中的紅色箭頭展示了“順取整”的程序
圖中將十進制數
0.375轉換為了二進制數0.011
其他進制到十進制
?? 方法:每一位數字乘上基數^對應指數(位權),然后相加求和

本圖中的數值
12C.1415926,是十六進制數,
上圖中,基數是16,“對應指數”就是橙色標出的數,以小數點為分界,小數點左側第一位的對應指數為0,而小數點右側第一位的對應指數為-1,
從低位向高位(圖中從右向左),這個指數不斷增大,
十六進制的基數是16,那么八進制的基數就是8,以此類推,
-
[例] 16進制轉換為10進制

圖中將十六進制數
12C.14轉換為了十進制數300.078125
二進制與其他進制的互相轉換
二進制和其他進制的互相轉換就要方便多了,
二進制到其他進制
?? 方法:以小數點為界,向左右兩側,每幾位讀為一個數,不足的就補零,
-
關于這里的“每幾位”,需要看要轉換為哪個進制的數,比如轉換為十六進制,其一位能表示
0-F這16種狀態,需要用4個二進制位來表示,那么就是每4位一讀,再比如八進制一位能表示
0-7這8種狀態,需要用3個二進制位來表示,那么就是每3位一讀, -
關于補零,無論是從小數點左側第一位開始往左每幾位一讀,還是從小數點右側第一位開始往右每幾位一讀,都難免遇到“位數不夠讀”的情況,這個時候就需要補零,
-
[例] 二進制轉換為十六進制

圖中將二進制數
1001001.011轉換為了十六進制數49.6- 紅色箭頭展示了以小數點為分界,分別往左右進行讀取,左側從低位向高位,而右側從高位向低位,
- 圖中括號展示了補零的程序,
100和011都不足4位,按照讀取方向,分別在其左方和右方補零, - 最后,每4位一讀,用十六進制表示出來,就得到了最后的結果,
-
[例] 二進制轉換為八進制

圖中將二進制數
1001101.1011轉換為了八進制數115.54- 具體做法和上面一個例子一致,這里不多贅述,
其他進制到二進制
?? 方法:每位讀為幾位二進制數,
-
關于這里的“每位讀為幾位二進制數”,需要看轉換前是哪個進制的數,比如原本是十六進制,其一位能表示
0-15這16種狀態,需要用4個二進制位來表示,那么就是每位讀為4位二進制數, -
附一個對照表:
八進制位 ←對應的二進制 十六進制位 ←對應的二進制 000000000100110001201020010301130011410040100510150101611060110711170111- - 81000- - 91001- - A1010- - B1011- - C1100- - D1101- - E1110- - F1111實際應用中,可以根據8421碼來進行計算,不用死記硬背,
比如三位二進制
101, 對應421,轉換為十進制就是4+1=5,
再比如四位二進制1010, 對應8421,轉換為十進制就是8+2=10,
-
[例] 八進制轉換為二進制

圖中將八進制數
67.23轉換為了二進制數110111.010011- 每一位八進制位讀成3位二進制數(一位八進制位能表達8種狀態,需要3位二進制位來表示)
不想用8421碼其實也沒問題,八進制和十六進制的每一位數其實可以看作是十進制整數,使用除2倒取余的方法能將其逐位展開為二進制數,
(本質上還是按位讀取,每位讀為幾位二進制數)
比如上圖中,原八進制數中的
6與3分別可以用除2倒取余的方法展開為110與011,和8421碼得出的結果一致,
十六進制與八進制的互相轉換
十六進制和八進制之間無法直接轉換:
- 如果要把十六進制數轉換為八進制數,就需要先將十六進制轉換為十進制或二進制,進而再轉換為八進制,
- 把八進制轉為十六進制也需要用十進制或二進制“過渡一下”
八進制轉十六進制的例子
-
通過二進制進行間接轉換

上圖中我將八進制數
12.450先轉換為了二進制數001010.100101000,再轉換為了十六進制數A.94,二進制和其他進制互相轉換的方法在上面已經介紹過了,這里就不多贅述,
-
通過十進制進行間接轉換

上圖中我將八進制數
12.450先轉換為了十進制數10.578125,再轉換為了十六進制數A.94,- 這里再提一嘴:十進制轉為其他進制時,需將整數和小數分而治之,
十進制和其他進制互相轉換的方法在上面也已經介紹過了,這里就不多贅述,
十六進制轉八進制的例子
-
通過二進制進行間接轉換

上圖中我將十六進制數
C.98先轉換為了二進制數1100.10011000, 再轉換為了八進制數14.46,可以看到,十六進制轉八進制和八進制轉十六進制的程序是十分類似的,
-
通過十進制進行間接轉換

上圖中我將十六進制數
C.98先轉換為了十進制數12.59375, 再轉換為了八進制數14.46,
冷笑話

這位老伙計為什么要在萬圣節前夜穿上圣誕節的服裝呢?
答:因為 Oct 31 = Dec 25,
October(十月) 31 是萬圣節前夜,December(十二月) 25 是圣誕節,
但是在這也可以理解成Octal(八進制)31= Decimal(十進制)25(*^_^*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527849.html
標籤:其他
