3.4 二八å��å…进制整数¶
问题¶
ä½ éœ€è¦�转æ�¢æˆ–者输出使用二进制,八进制或å��å…进制表示的整数。
解决方案¶
为了将整数转æ�¢ä¸ºäºŒè¿›åˆ¶ã€�八进制或å��å…进制的文本串,
�以分别使用 bin() , oct() 或 hex() 函数:
>>> x = 1234
>>> bin(x)
'0b10011010010'
>>> oct(x)
'0o2322'
>>> hex(x)
'0x4d2'
>>>
å�¦å¤–ï¼Œå¦‚æžœä½ ä¸�想输出 0b , 0o 或者 0x çš„å‰�缀的è¯�,å�¯ä»¥ä½¿ç”¨ format() 函数。比如:
>>> format(x, 'b')
'10011010010'
>>> format(x, 'o')
'2322'
>>> format(x, 'x')
'4d2'
>>>
整数是有符å�·çš„ï¼Œæ‰€ä»¥å¦‚æžœä½ åœ¨å¤„ç�†è´Ÿæ•°çš„è¯�,输出结果会包å�«ä¸€ä¸ªè´Ÿå�·ã€‚比如:
>>> x = -1234
>>> format(x, 'b')
'-10011010010'
>>> format(x, 'x')
'-4d2'
>>>
å¦‚æžœä½ æƒ³äº§ç”Ÿä¸€ä¸ªæ— ç¬¦å�·å€¼ï¼Œä½ 需è¦�å¢žåŠ ä¸€ä¸ªæŒ‡ç¤ºæœ€å¤§ä½�长度的值。比如为了显示32ä½�的值,å�¯ä»¥åƒ�下é�¢è¿™æ ·å†™ï¼š
>>> x = -1234
>>> format(2**32 + x, 'b')
'11111111111111111111101100101110'
>>> format(2**32 + x, 'x')
'fffffb2e'
>>>
为了以ä¸�å�Œçš„进制转æ�¢æ•´æ•°å—符串,简å�•的使用带有进制的 int() 函数å�³å�¯ï¼š
>>> int('4d2', 16)
1234
>>> int('10011010010', 2)
1234
>>>
讨论¶
大多数情况下处ç�†äºŒè¿›åˆ¶ã€�八进制和å��å…进制整数是很简å�•的。 å�ªè¦�è®°ä½�这些转æ�¢å±žäºŽæ•´æ•°å’Œå…¶å¯¹åº”的文本表示之间的转æ�¢å�³å�¯ã€‚永远å�ªæœ‰ä¸€ç§�整数类型。
最å�Žï¼Œä½¿ç”¨å…«è¿›åˆ¶çš„程åº�员有一点需è¦�注æ„�下。 PythonæŒ‡å®šå…«è¿›åˆ¶æ•°çš„è¯æ³•è·Ÿå…¶ä»–è¯è¨€ç¨�有ä¸�å�Œã€‚æ¯”å¦‚ï¼Œå¦‚æžœä½ åƒ�下é�¢è¿™æ ·æŒ‡å®šå…«è¿›åˆ¶ï¼Œä¼šå‡ºçŽ°è¯æ³•错误:
>>> import os
>>> os.chmod('script.py', 0755)
File "<stdin>", line 1
os.chmod('script.py', 0755)
^
SyntaxError: invalid token
>>>
需确ä¿�八进制数的å‰�缀是 0o ,就åƒ�下é�¢è¿™æ ·ï¼š
>>> os.chmod('script.py', 0o755)
>>>