Python中的進制表示方式及轉換方法


在Python中,非十進制數字的表示方式為:

二進制:前面加0b,如0b1001

八進制:前面加0o,如0o3562

十六進制:前面加0x,如0x2af3(字母a-f大小寫隨意)

不同進制數字可直接進行數學計算,結果返回十進制:

x=0b100     #二進制的4
y=0xa       #十六進制的10
print(x+y,type(x),type(y))

執行結果:14 <class 'int'> <class 'int'>

下面按照不同的進制說明相關的轉換方法:

bin(binary:其他進制數字→0b開頭的二進制字符串)

x=bin(100)
y=bin(0x2a)
print(x,type(x))
print(y,type(y))

執行結果:
0b1100100 <class 'str'>
0b101010 <class 'str'>

oct(octonary:其他進制數字→0o開頭的八進制字符串)

x=oct(100)
y=oct(0b100)
print(x,type(x))
print(y,type(y))

執行結果:
0o144 <class 'str'>
0o4 <class 'str'>

hex(hexadecimal:其他進制數字→0x開頭的十六進制字符串)

x=hex(100)
y=hex(0b100)
print(x,type(x))
print(y,type(y))

執行結果:
0x64 <class 'str'>
0x4 <class 'str'>

int(integer:三種情況→十進制數字)

情況一:0?開頭的其他進制數字→十進制數字

a=0b100
b=0xf
print(int(a))
print(int(b))

執行結果:
4
15

情況二:0?開頭的其他進制字符串→十進制數字

a='0b100'
b='0xf'
print(int(a,base=0))
print(int(b,0))

執行結果:
4
15

情況三:不帶0?的其他進制字符串→十進制數字

a='100'
b='f'
print(int(a,base=2))
print(int(b,16))

執行結果:
4
15
int()的第一個參數 int()的第二個參數
0?開頭的其他進制數字 不輸
0?開頭的其他進制字符串 必輸base=0,或簡寫為0
不帶0?的其他進制字符串 必輸base=進制數,或簡寫為進制數

注意:bin、oct、hex都直接接一個參數且輸出的都是字符串。int與這三個不同,它分三種情況,接一個或兩個參數,且輸出結果是數字。

x=0b101
y=str(x)
print(x,type(x))
print(y,type(y))

執行結果:
5 <class 'int'>
5 <class 'str'>
注意:直接手輸的0b、0o、0x開頭的非十進制數字的數據類型都是int,對其print或轉為字符串時,會先轉化成十進制再轉成字符串

補充:筆者自行推導的int2bin、bin2int

基於二進制與十進制的轉化關系,筆者自己推導了輸入、輸出均為十進制數字的int2bin、bin2int函數:

int2bin:十進制轉二進制(輸入、輸出均為十進制數字,如將十進制的7轉換為十進制的111)

def int2bin(x):
    s=''
    while x>0:
        s=s+str(x % 2)
        x=x//2
    return int(s[::-1])
print(int2bin(7))

bin2int:二進制轉十進制(輸入、輸出均為十進制數字,如將十進制的111轉換為十進制的7)

def bin2int(x):
    y=str(x)
    power = len(y)-1
    s=0
    for i in y:
        s=s+int(i)*(2**power)
        power-=1
    return s
print(bin2int(111))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM