1. 程式人生 > 程式設計 >python 進位制轉換 int、bin、oct、hex的原理

python 進位制轉換 int、bin、oct、hex的原理

原理

十進位制轉n進位制都可以使用倒除法:對十進位制進行除n的運算,直到商為0為止,然後將各個步驟中得到的餘數倒著寫出來.
n進位制轉十進位制:(例子:二進位制轉十進位制)
101001 => 2^5 + 2^3 + 1 = 32 + 8 + 1 = 41
10111 => 2^4 + 2^2 + 2 + 1 = 16 + 4 + 2 +1 = 23
同樣類推一下,n進位制轉十進位制就是將2為底換成n為底就好了


還有其他方法,比如使用中間二進位制,
例如,將十進位制轉成八進位制或者十六進位制,先轉成二進位制再轉成八進位制或者十六進位制
十進位制 => 二進位制 => 十六進位制

520 => 1000001000 (512+8) => 10 0000 1000 => 208(十六進位制)
1314 => 10100100010(二進位制) => 2442(八進位制) => 522(十六進位制)


八進位制或者十六進位制轉成十進位制
十六進位制 => 二進位制 => 十進位制
522 => 0101 0010 0010 => 1024 + 256 + 32 + 2 = 1280+34 = 1314(十進位制)

十進位制轉其他進位制的數

使用內建函式bin、oct、hex可以將整數轉換成對應的二進位制、八進位制、十六進位制;
注意只能轉換整數,返回的資料是一個字串型別

a = 12# 預設數字都是十進位制
print(a)# 12
b = 0b0101010111#以0b開頭的是二進位制數,預設也是十進位制輸出
print(b)# 343
c = 0o33# 以0o開頭的是八進位制數
print(c)# 27
d = 0x24# 以0x開頭的是十六進位制數
print(d)# 36
a = 12 # 12是十進位制數
print(bin(a))# 0b1100 使用bin內建函式可以將數字轉換為二進位制
print(oct(a))# 0o14 使用oct內建函式可以將數字轉換為八進位制
print(hex(a))# 0xc 使用hex內建函式可以將數字轉換為十六進位制
print(type(bin(a)))# <class 'str'>
print(bin(0o1111))# 0b1001001001
print(bin(0xff))# 0b11111111
print(oct(0xff))# 0o377
print(hex(0b00011111)) # 0x1f
# print(bin(1.12))
# print(oct(1.12))
# print(hex(1.12))
# TypeError: 'float' object cannot be interpreted as an integer

其他進位制轉換成十進位制

int函式的使用
int(x,base=10)base是進位制,預設是十進位制
int函式常用來將其他型別的資料轉換成整型
注意
x 有兩種:str / int
1、若 x 為純數字,就不能給base傳引數,否則就會報錯
2、若 x 為 str,則可以給base傳參,不傳就預設是10;給base傳什麼引數就認為此字串為什麼進位制的數,然後把它轉換成十進位制的數,但字串裡的數必須符合該進位制規範,否則會報錯

print(int(3.112))# 3
# print(int(3.112,8))# TypeError: int() can't convert non-string with explicit base
print(int('10',2))# 2
# print(int('22',2))# ValueError: invalid literal for int() with base 2: '22'
print(int('0xaaa',16))# 2730
print(int('0b111',2))# 7
print(int('0o1237',8))# 671

到此這篇關於python 進位制轉換 int、bin、oct、hex的原理的文章就介紹到這了,更多相關python 進位制轉換 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!