Python 常用进制转换

常用进制: 二进制(Binary)、八进制(Octal)、十进制(Decimal)、十六进制(Hexadecimal)。

进制之间关系图:

二进制、八进制、十六进制转十进制

>>> int('0b11010',2)
26
>>> int('0o32',8)
26
>>> int('0x1a',16)
26

八进制、十进制、十六进制转二进制

八进制、十六进制不能直接转成二进制,需要先转十进制。

>>> bin(26)
'0b11010'
>>> bin(int('0o32',8))
'0b11010'
>>> bin(int('0x1a',16))
'0b11010'

二进制、十进制、十六进制转八进制

同样,二进制、十六进制不能直接转成八进制,需要先转十进制。

>>> oct(26)
'0o32'
>>> oct(int('0b11010',2))
'0o32'
>>> oct(int('0x1a',16))
'0o32'

二进制、十进制、八进制转十六进制

同样,二进制、八进制不能直接转成十六进制,需要先转十进制。

>>> hex(26)
'0x1a'
>>> hex(int('0b11010',2))
'0x1a'
>>> hex(int('0o32',8))
'0x1a'

延伸问题

  1. 判断一个数是否是2的幂次方,若是,并判断出来是多少次方?

    import math
    
    def calPowerOf2(num):
        assert num & num-1 == 0, "This number is not power of 2"
        return math.log(num, 2)
    
    print(calPowerOf2(1024)) # echo 10
    
  2. 给定一个数n,求大于等于n的2的最小次幂?

    def nextPowerOf2(n):
        count = 0;
        if n and not (n & (n - 1)):
            return n
        while (n != 0):
            n >>= 1
            count += 1
        return 1 << count
    
    print(nextPowerOf2(100)) # echo 128