• 十进制:decimal system,每一位最高为9,达不到10
  • 二进制:binary system,每一位最高为1,达不到2
  • 八进制:octonary number system,每一位最高为7,达不到8
  • 十六进制:hexadecimal,每一位最高为 15 或者 0xf,取不到16(那就是0xG了,:-D)。

推论:

  • 如果一个数为25,则它的进制不低于6进制;
  • 自然也可以这样理解,如果一个数的某一位的取值范围为 [0,m−1],则该数即为 m进制;
>>> 0b1010
10 
            # 也即python原生语法是支持二进制表示
>> 0xff
255
            # 自然也支持八进制

向十进制转换

int(string, base)
            # 第一个参数标识:需要转换的原始的数据,以字符串的形式表示
            # 第二个参数标识:原始数据的base或者叫本身的进制表示
            # 2:二进制
            # 8:八进制
            # 16:表示16进制
            # 最终转化为十进制

二进制 ⇒ 十进制

>>> int('1010', 2)
10

十六进制 ⇒ 十进制

>>> int('f', 16)
15
>>> int('0xf', 16)
15
>>> int('0xff', 16)
255

八进制 ⇒ 十进制

>>> int('17', 8)
15  
            # 15 = 7*8^0+1*8^1

向16进制转化

hex(string)
            # 也即没有进制的设置
            # 只接受10进制
            # 为实现其他进制的转换,可先转换为十进制使用int()
            # 返回位字符串类型
>>> hex(1033)
'0x409'

>>> hex(int('101010', 2))
'0x2a'

>>> hex(int('17', 8))
'0xf'

向二进制转换

bin(十进制整型)
>>> bin(10)
'0b1010'

>>> bin(int('ff',16))
'0b11111111'

>>> bin(int('17',8))
'0b1111'

向八进制转换

oct()
            # 不同于hex/bin
            # 通过参数进行判断
            # 其是二进制、十进制、16进制
            # 也即oct函数可将任意进制的数转换为8进制
>>> oct(0b1010)
'012'
>>> oct(11)
'013'
>>> oct(0xf)
'017'

m进制 的转换

不断的对m求模取余,余数为当前位(低位向高位),商新的被除数,支持商为0。

例,我们以十进制的25向3进制转换;

25/3 ⇒ 8(1)
8/3 ⇒ 2(2)
2/3 ⇒ 0(2)

则25的三进制表示为 221,1⋅30+2⋅31+2⋅32=25

def base(x, m):
    ms = []
    while x:
        ms.append(x%m)
        x //= m
                    # python 3
                    # //:表示整除,保留整数部分
                    // /:得float类型
    return ms

References

[1] Python 二进制,十进制,十六进制转换