3.4 二八十六進(jìn)制整數(shù)

2018-02-24 15:26 更新

問(wèn)題

你需要轉(zhuǎn)換或者輸出使用二進(jìn)制,八進(jìn)制或十六進(jìn)制表示的整數(shù)。

解決方案

為了將整數(shù)轉(zhuǎn)換為二進(jìn)制、八進(jìn)制或十六進(jìn)制的文本串,可以分別使用 bin() 、oct()hex() 函數(shù):

>>> x = 1234
>>> bin(x)
'0b10011010010'
>>> oct(x)
'0o2322'
>>> hex(x)
'0x4d2'
>>>

另外,如果你不想輸出 0b , 0o 或者 0x 的前綴的話,可以使用 format() 函數(shù)。比如:

>>> format(x, 'b')
'10011010010'
>>> format(x, 'o')
'2322'
>>> format(x, 'x')
'4d2'
>>>

整數(shù)是有符號(hào)的,所以如果你在處理負(fù)數(shù)的話,輸出結(jié)果會(huì)包含一個(gè)負(fù)號(hào)。比如:

>>> x = -1234
>>> format(x, 'b')
'-10011010010'
>>> format(x, 'x')
'-4d2'
>>>

如果你想產(chǎn)生一個(gè)無(wú)符號(hào)值,你需要增加一個(gè)指示最大位長(zhǎng)度的值。比如為了顯示32位的值,可以像下面這樣寫:

>>> x = -1234
>>> format(2**32 + x, 'b')
'11111111111111111111101100101110'
>>> format(2**32 + x, 'x')
'fffffb2e'
>>>

為了以不同的進(jìn)制轉(zhuǎn)換整數(shù)字符串,簡(jiǎn)單的使用帶有進(jìn)制的int()函數(shù)即可:

>>> int('4d2', 16)
1234
>>> int('10011010010', 2)
1234
>>>

討論

大多數(shù)情況下處理二進(jìn)制、八進(jìn)制和十六進(jìn)制整數(shù)是很簡(jiǎn)單的。只要記住這些轉(zhuǎn)換屬于整數(shù)和其對(duì)應(yīng)的文本表示之間的轉(zhuǎn)換即可。永遠(yuǎn)只有一種整數(shù)類型。

最后,使用八進(jìn)制的程序員有一點(diǎn)需要注意下。Python指定八進(jìn)制數(shù)的語(yǔ)法跟其他語(yǔ)言稍有不同。比如,如果你像下面這樣指定八進(jìn)制,會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤:

>>> import os
>>> os.chmod('script.py', 0755)
    File "<stdin>", line 1
        os.chmod('script.py', 0755)
                            ^
SyntaxError: invalid token
>>>

需確保八進(jìn)制數(shù)的前綴是 0o ,就像下面這樣:

>>> os.chmod('script.py', 0o755)
>>>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)