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函數,可以將其他三個進位的數值直接轉成八進位。