Python學習入門到精通:python進位轉換

  • 2020 年 2 月 13 日
  • 筆記

本篇內容稍稍有一點難度,如果你只是python愛好者,可以忽略此篇教程,如果你是電腦相關專業學習者或從業者,那麼建議你認真閱讀。

我們平時使用的數字是十進位,逢10進1, 而電腦採用的是二進位,此外,有時你還會遇到八進位,十六進位, 其實只要掌握好方法,這些進位的理解就不難,相互之間的轉換也並不複雜,我們先來看一個10進位的例子

432  

你當然知道4在百位,3在十位, 2在個位,這個數值可以換一種描述方式

4*102 + 3*101 + 1*100 = 400 + 30 + 1 介紹這個公式是為了讓你更好的理解其他進位的數值如何轉成10進位

1. 手動計算進位轉換

1.1 二進位轉十進位

以1101010為例,講解如何轉成十進位數值

1101010 = 1*26 + 1*25 + 0*24 + 1*23 + 0*22 + 1*21 + 0*20 = 64 + 32 + 8 + 4 = 106 python中二進位的數值以0b開頭

print(0b1101010)   # 106  

1.2 八進位轉十進位

如果你已經理解了二進位如何轉成十進位,那麼八進位轉成十進位也就變得簡單了,以八進位125為例

125 = 1*82 + 2*81 + 5*80 = 64 + 16 + 5 = 85 在python中,八進位的數值使用0o開頭

print(0o125)  # 85  

1.3 十六進位轉十進位

十六進位稍稍比八進位麻煩一點,十六進位是逢16進1,因此單個位上的數值會超過9, 超過9的部分依次使用a, b, c, d, e, f, 分別代表10, 11, 12, 13, 14, 15。

以十六進位3f2a1為例 3f2a1 = 3*164 + 15*163 + 2*162 + 10*161 + 1*160 = 196608 + 61440 + 512 + 160 + 1 = 258721

python中十六進位的數值以0x開頭

print(0x3f2a1)  # 258721  

2. 使用函數進行進位轉換

2.1 二進位,八進位,十六進位轉成十進位

value = int('1101010', 2)  print(value)        # 106    value = int('125', 8)  print(value)        # 85    value = int('3f2a1', 16)  print(value)        # 258721  

使用int函數可以將二進位,八進位,十六進位的數值轉成十進位數值,而且字元串的開頭可以不攜帶進位的標識,如果你喜歡使用,也可以寫成 int('0x3f2a1', 16)

2.2 十進位轉成二進位,八進位,十六進位

十進位轉二進位使用bin()函數, 十進位轉八進位使用oct()函數, 十進位轉十六進位使用hex()函數

print(bin(106))     # 0b1101010 十進位轉二進位  print(oct(85))      # 0o125     十進位轉八進位  print(hex(258721))  # 0x3f2a1   十進位轉十六進位  

2.3 八進位,十六進位轉二進位

並沒有函數可以實現直接將八進位或十六進位數轉成二進位,因此需要借用int()函數先將八進位的數轉成十進位,然後使用bin()函數將十進位數轉成二進位

print(bin(int('125', 8)))   # 八進位轉二進位  print(bin(int('0x3f2a1', 16)))  # 十六進位轉二進位  

2.4 二進位轉八進位,十六進位

二進位轉八進位可以使用oct函數直接轉換,而二進位轉十六進位則需要藉助int函數

print(oct(0b1101010))           # 二進位轉八進位  print(hex(int('1101010', 2)))   # 二進位轉十六進位  

2.5 八進位與十六進位互相轉換

十六進位轉八進位,可以直接使用oct函數,而八進位轉十六進位則需要藉助int函數

print(oct(0x3f2a1))     # 十六進位轉八進位  print(hex(int('125', 8)))   # 八進位轉十六進位  

最強大的莫過於oct函數,可以將其他三個進位的數值直接轉成八進位。