生活中我們使用的數字都是十進位制的,而二進位制是機器能夠識別的最直接的語言。但是二進位制又太大,記錄起來非常的不方便。所以通常會將二進位制轉化為八進位制或者十六進位制。
日常生活中我們所說的數字 (十進位制)在0~9之間,同理 二進位制的範圍是01,八進位制的範圍07,十六進位制的範圍0~15。 那問題來了,當超過9之後,十六進位制該如何表示呢? 答案是用af,表示對應的1015
進位制的表達
在Python中該如何表示每一種進位制呢?
- 預設輸入的數字為十進位制
- 以0b開頭的數字表示二進位制
- 以0o開頭的數字表示八進位制
- 以0x開頭的數字表示十六進位制
# 普通的十進位制
a = 12
print(a) # 12
# 0b表示二進位制
b = 0b100100
print(b) # 36
# 0o表示八進位制
c = 0o56
print(c) # 46
# 0x表示十六進位制
d = 0x2a1
print(d) # 673
進位制之間的轉換
1、十進位制轉二進位制
將十進位制數除2取餘數,直到商為0時。
以12為例,
12 / 2 = 6 餘 0
6 / 2 = 3 餘 0
3 / 2 = 1 餘 1
1 / 2 = 0 餘 1
從上到下取餘數,因此,12 對應的 二進位制 為 :1100
2、二進位制轉十進位制
把二進階按權展開,相加即可。如二進位制位:1100,按照下面的格式展開
0 0 1 1
1\*2^0 1\*2^1 1\*2^2 1\*2^3
0 * 1*2^0 + 0 * 1*2^1 + 1 * 1*2^2 + 1 * 1*2^3 = 12
3、二進位制與八進位制轉換
將2進位制從右到左的順序按照3位拆分,不足時 補0。 例如二進位制:1100可拆分成
001 100 然後按權展開組合起來即可。
即:
0*2^2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 = 1
1*2^2 + 0 * 2 ^ 1 + 0 * 2 ^ 0 = 4
因此對應的八進位制為 14。
4、八進位制轉二進位制
通過對八進位制除2取餘數,
1的二進位制為1 ,不夠3位補0,即001
4的二進位制為100
因此八進位制14轉二進位制的結果 為:001100
事實上,日常中用到的主要就是二進位制和十進位制的轉換,其他了解一下就可以了。
在Python中,已經講各種進位制的轉換進行了封裝,直接呼叫即可。
a = 12
print(bin(a)) # 0b1100 十進位制轉二進位制
print(oct(a)) # 0o14 十進位制轉八進位制
print(hex(a)) # 0xc 十進位制轉十六進位制
# 二進位制轉十進位制
print(int('0b1100', 2))
# 八進位制轉十進位制
print(int('0o14', 8))
# 十六進位制轉十進位制
print(int('0xc', 16))