Python 常用进制转换

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

进制之间关系图:

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

1
2
3
4
5
6
>>> int('0b11010',2)
26
>>> int('0o32',8)
26
>>> int('0x1a',16)
26

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

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

1
2
3
4
5
6
>>> bin(26)
'0b11010'
>>> bin(int('0o32',8))
'0b11010'
>>> bin(int('0x1a',16))
'0b11010'

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

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

1
2
3
4
5
6
>>> oct(26)
'0o32'
>>> oct(int('0b11010',2))
'0o32'
>>> oct(int('0x1a',16))
'0o32'

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

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

1
2
3
4
5
6
>>> hex(26)
'0x1a'
>>> hex(int('0b11010',2))
'0x1a'
>>> hex(int('0o32',8))
'0x1a'

延伸问题

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

    1
    2
    3
    4
    5
    6
    7
    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的最小次幂?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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