python3之數字(在實際應用中的數字--十六進位、八進位和二進位記數)
----------
python整數能夠以十六進位、八進位和二進位記數法來編寫,作為一般的十進位記數法的補充。如例:
>>>0o1,0o20,0o377 #八進位(1,16,255)>>>0x01,0x10,0xFF #十六進位(1,16,255)>>>0b1,0b10000,0b11111111 #二進位(1, 16, 255)
python預設地用十進位值顯示,但它提供了內建的函數,允許我們把整數轉換為其他進位的數字字串:
>>> oct(64),hex(64),bin(64)('0o100', '0x40', '0b1000000')
oct函數會將十進位數轉換為八位元,hex函數會將十進位轉換為十六進位數,而bin函數會將十進位數轉換為二進位。另一種方式,內建int函數會將一個數位字串轉換為一個整數,並可以通過定義的第二個參數來確定第一個數字字串參數的進位。
>>>int('64'),int('100',8),int('40',16),int('1000000',2)(64, 64, 64, 64)
在繼續學習之前,有兩點需要注意。首先,python2.6的使用者應該記住在編寫八進位之前,直接用一個0開頭,python中最初的八進位格式如下:
>>>0o1,0o20,0o377 #python2.6與python3.0中都可用(1, 16, 255)>>>01,020,0377 #只用於python2.6中(1, 16, 255)
在python3.0中,上例中的第二組文法將會產生錯誤。即便它在python2.6中不是一個錯誤,還是要小心,不要用0開始一個數字字串,除非你真的是想要表示一個八進位的值。python2.6會將其當作是八位元,但可能不像你所期待的那樣工作,010在python2.6中總是八位元,而不是十進位數。也就是說,為了保持與十六進位和二進位的形式對稱,python3.0修改了八進位的形式,在python3.0中必須使用0o010,並且,在python2.6中,也應該儘可能使用0o010。
其次,注意這些常量可以產生任意長度的整數。例如,下面的例子建立了十六進位形式的一個整數,然後先用十進位形式顯示它,再將其轉換為八進位和二進位的形式:
>>> X=0xFFFFFFFFFFFFFF>>> X72057594037927935>>> oct(X)'0o3777777777777777777'>>> bin(X)'0b11111111111111111111111111111111111111111111111111111111'>>>