注:本文所有代碼均經(jīng)過Python 3.7實際運行檢驗害幅,保證其嚴謹性。
Python中整數(shù)的進制
Python中的整數(shù)默認都是十進制的岂昭,其表示方法和我們日辰孟蓿看到的沒有不同,任意給定一個正數(shù)比如a = 49
佩抹,都默認變量a代表的是十進制的整數(shù)叼风。
Python語言一樣可以用二進制、八進制和十六進制來表示整數(shù)棍苹,與十進制表示法不同无宿,這些進制法的表示需要在整數(shù)字面值加一個前綴即可。
十進制demical——無前綴枢里。如338孽鸡。
二進制binary——0b或OB前綴蹂午,如0b1011001。
八進制octal——0o前綴彬碱,如0o557豆胸。
十六進制hexadecimal——0x前綴,如0x16f巷疼。
一晚胡、二進制、八進制嚼沿、十六進制的整數(shù)轉換為十進制的整數(shù)
如何把十進制數(shù)number轉換成二進制估盘、八進制和二進制的整數(shù)?
方法是直接使用Python內置函數(shù)bin(number)骡尽、oct(number)和hex(number)遣妥。
簡單而粗暴。
a = 16 #a是一個十進制整數(shù)攀细。
bin(a)
Out[39]: '0b10000'
oct(a) #十進制轉換成八進制箫踩。
Out[40]: '0o20'
hex(a) #十進制轉換成十六進制。
Out[41]: '0x10'
二谭贪、十進制的整數(shù)轉換為二進制班套、八進制、十六進制的整數(shù)
如何把二進制故河、八進制和十進制整數(shù)x轉換成十進制的整數(shù)吱韭?
同樣一個函數(shù)就能搞定,但是這個轉換相比上面的要略微麻煩一點點鱼的。
方法是用int()這個內置函數(shù)理盆,可能有人看到這點就覺得沒難度了。但凑阶,其實這里很容易出錯猿规。
一般來說,int()我們用得挺多宙橱,一般把一串只有數(shù)字的字符串轉換為int整數(shù)姨俩,或者浮點數(shù)向零取整。比如:
int('98999')
Out[34]: 98999
type('98999')
Out[35]: str
int('98999')
Out[36]: 98999
type(int('98999'))
Out[37]: int
int(-3.5)
Out[38]: -3
int(3.5)
Out[39]: 3
但是师郑,如果要用int()來進行不同進制之間的轉換時环葵,其用法就有了一點變化。
int()的完整語法是
int(x, base=10)宝冕,關于此函數(shù)张遭,官方的解釋是這樣的:
返回一個基于數(shù)字或字符串 x 構造的整數(shù)對象,或者在未給出參數(shù)時返回 0地梨。
如果 x 不是數(shù)字菊卷,或者有 base 參數(shù)缔恳,x 必須是字符串、bytes洁闰、表示進制為 base 的 整數(shù)字面值 的 bytearray 實例歉甚。
換句話說,默認base=10扑眉,即十進制纸泄;若是base要更改默認情況,比如改成base=2襟雷,那么它表示前面的x是二進制整數(shù)時刃滓,x的類型就有了變化仁烹,不能是int整型耸弄,而必須是str字符串類型了。
所以卓缰,把二進制计呈、八進制和十進制整數(shù)x轉換成二進制的整數(shù)有兩種情況:
第一種情況很簡單,以二進制轉換為十進制為例征唬,把二進制的整數(shù)表示為Python語言規(guī)定的那樣捌显,人覺得別捏但機器能識別的形式:'0b101'。這時直接使用int()函數(shù)即可总寒。加了'0b'開頭的二進制數(shù)扶歪,此時就是一個int,可以假設它是用十進制的形式來表示二進制數(shù)摄闸。
如下面所給的例子:
x = 0b101
type(x)
Out[50]: int #此時type()作用于二進制整數(shù)x時善镰,被識別為int類型。
int(x)
Out[51]: 5
第二種情況復雜一些年枕,但用得可能更多一些炫欺。對于人的思維,輸入一個八進制數(shù)熏兄,比如342品洛,會直接輸入342,而不會去帶前綴'0o'摩桶。對于這樣的數(shù)字桥状,如何轉換成二進制才是我們正常思維容易遇到的問題。
前面對int(x, base=10)有過解釋硝清,當base不再是默認的10的時候岛宦,x不能再是int型數(shù)據(jù),而必須轉為str字符串類型耍缴,此函數(shù)才能起作用砾肺,否則會報錯挽霉。拿下面的例子作說明。
把一個八進制的整數(shù)754轉換成十進制的整數(shù)变汪,結果是多少侠坎?
x = 754
#把八進制整數(shù)754先轉換為字符串類型,再使用int()函數(shù)裙盾。
int(str(x), 8)
Out[55]: 492
雖然在思維上更容易接受些实胸,但是從實現(xiàn)層面上講,如果先把754前面加上0o直接表示為Python可識別的八進制整數(shù)番官,再直接使用int()函數(shù)會更不容易出錯一些庐完。個人更推薦第一種轉換方法。
小結
十進制整數(shù)number轉換為二進制徘熔、八進制门躯、十六進制的整數(shù),直接使用Python內置函數(shù)bin(number)酷师、oct(number)和hex(number)即可讶凉。
二進制、八進制山孔、十六進制整數(shù)x轉換為十進制的整數(shù)懂讯,先把它們統(tǒng)一表示為Python可識別的樣式,二進制前面加前綴0b台颠,八進制前面加前綴0o褐望,十六進制前面加0x,再直接使用int(x)即可得到所需要的十進制整數(shù)串前。