Python整数进制间转换

Python整数进制间转换

tips:

  • 本文代码基于python3编写
  • 代码仓库

Python进制

Python中能够识别二进制、八进制、十进制及十六进制,Python整数显示进制为十进制,其他进制作为补充。

例如12在Python中各进制下的表示:

进制 表示
二进制 0b1100
八进制 0o14
十进制 12
十六进制 0xc

二进制

二进制是计算技术中广泛采用的一种数制。二进制是一种以2为基数的计数法,采用0和1两个数,逢二进一。

  1. 二进制转八进制

    二进制转八进制,二进制3位为一个单位按照二进制转十进制的方式转换,依次类推然后倒序拼接即可。

    #----- 手动转换--------#
    # 取3位为一个单位,不够的补零
    0b1100 -> 0b001100
    # 从右向左取第一组3位,作为八进制第0位数字
    100 -> 1*2**2 + 0*2**1 + 0*2**0 = 4
    # 从右向左取第二组3位(不够3位补零),作为八进制第1位数字
    001 -> 0*2**2 + 0*2**1 + 1*2**0 = 1
    # 最后八进制数
    0o14
    
    #----- Python函数转换--------#
    # 方法1,oct函数
    >>> oct(0b1100)
    '0o14'
    # 方法2,先转为十进制,然后转为八进制
    >>> oct(int("0b1100",2))
    '0o14'
    >>> oct(int(0b1100))
    '0o14'
    
  2. 二进制转十进制

    二进制数第0位的权值是2的0次方,第1位的权值是2的1次方,依次类推,权值乘以相应系数并相加即可得到十进制数。

    #----- 手动转换--------#
    0b1100 -> 1*2**3 + 1*2**2 + 0*2**1 + 0*2**0 = 12 
    
    #----- Python函数转换--------#
    # 方法1,字符型整数转十进制,指定解析进制类型
    >>>  int('0b1100',2)
    12
    # 方法2,自动识别输入进制类型,并转为十进制
    >>>  int(0b1100)
    12
    
    
  3. 二进制转十六进制

    二进制转十六进制,二进制4位为一个单位按照二进制转十进制的方式转换,依次类推然后倒序拼接即可。由于十六进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

    #----- 手动转换--------#
    # 取4位为一个单位,不够的补零
    0b1100 -> 0b1100
    # 从右向左取第一组4位,作为十六进制第0位数字
    1100 -> 1*2**3 + 1*2**2 + 0*2**1 + 0*2**0 = 12 -> c
    # 最后十六制数
    0xc
    
    #----- Python函数转换--------#
    # 方法1,hex函数
    >>> hex(0b1100)
    '0xc'
    # 方法2,先转为十进制,然后转为十六进制
    >>> hex(int("0b1100",2))
    '0xc'
    >>> hex(int(0b1100))
    '0xc'
    

八进制

八进制是一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进一。

  1. 八进制转二进制

    八进制转二进制是二进制转八进制的反向过程,按照顺序,每1位八进制数改写成等值的3位二进制数,次序不变,不足时在最左边补零。

    #----- 手动转换--------#
    # 从右向左取第一位数转换
    4 = 1*2**2 + 0*2**1 + 0*2**0 -> 100
    # 从右向左取第二位数转换
    1 = 1*2**0 -> 001
    # 最后二进制
    0b0011000b1100
    
    #----- Python函数转换--------#
    # 方法1,bin函数
    >>> bin(0o14)
    '0b1100'
    # 方法2,先转为十进制,然后转为二进制
    >>> bin(int("0o14",8))
    '0b1100'
    >>> bin(int(0o14))
    '0b1100'
    
  2. 八进制转十进制

    八进制数第0位的权值是8的0次方,第1位的权值是8的1次方,依次类推,权值乘以相应系数并相加即可得到十进制数。

    #----- 手动转换--------#
    14 -> 1*8**1 + 4*8**0 = 12
    
    #----- Python函数转换--------#
    >>> int("0o14",8)
    12
    >>> int(0o14)
    12
    
  3. 八进制转十六进制

    八进制转十六进制有两种方法,一种是转为二进制然后再转十六进制,另一种是转为十进制然后转为十六进制。

    #----- 手动转换--------#
    # 先转换为二进制,然后转换为十六进制
    0o14 -> 0b1100 -> 1*2**3 + 1*2**2 + 0*2**1 + 0*2**0 = 12 -> 0xc
    # 先转换为十进制,然后转换为十六进制
    0o14 ->  1*8**1 + 4*8**0 = 12 -> 0xc
    #----- Python函数转换--------#
    >>> hex(0o14)
    '0xc'
    >>> hex(int("0o14",8))
    '0xc'
    >>> hex(int(0o14))
    '0xc'
    

十进制

  1. 十进制转二进制

    十进制转二进制,采用“除二取余,逆序排列”的方法,用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

     #----- 手动转换--------#
     # 12转换二进制如下
     12/2 ->0
     6/2  ->0
     3/2  ->1
     1/2  ->1
     12   --> 1100
    
     #----- Python函数转换--------#
     >>> bin(12)
     '0b1100'
     >>> bin(int("12",10))
     '0b1100'
     >>> hex(int(12))
     '0b1100'
    
  2. 十进制转八进制

    十进制转八进制,采用“除八取余,逆序排列”的方法,类似于十进制转二进制的方法。

    #----- 手动转换--------#
    # 12转换八进制如下
    12/8 -> 4
    1/8  -> 1
    12   --> 14
    
    #----- Python函数转换--------#
    >>> oct(12)
    '0o14'
    >>> oct(int("12",10))
    '0o14'
    >>> oct(int(12))
    '0o14'
    
  3. 十进制转十六进制

    十进制转十六进制,采用“除十六取余,逆序排列”的方法,类似于十进制转二进制的方法。用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15,字母不区分大小写。

    #----- 手动转换--------#
    # 12转换十六进制如下
    12/16 -> 12
    12    --> 12 --> C
    
    #----- Python函数转换--------#
    >>> hex(12)
    '0xc'
    >>> hex(int("12",10))
    '0xc'
    >>> hex(int(12))
    '0xc'
    

十六进制

  1. 十六进制转二进制

    十六进制转二进制,十六进制的一位对应二进制的四位,即每次取一位十六进制,按照十进制转二进制的方法,转换为4位的二进制。

    #----- 手动转换--------#
    # 取一位十六进制转换二进制,依次类推,然后在组合即可
    0xac 
    c -> 12 -> 1100
    a -> 10 -> 1010
    0xac -> 10101100
    
    #----- Python函数转换--------#
    >>> bin(0xac)
    '0b10101100'
    >>> bin(int("0xac",16))
    '0b10101100'
    >>> bin(int(0xac))
    '0b10101100'
    
  2. 十六进制转八进制

    十六进制转八进制有两种方法,一种是先转换为二进制然后在转换为八进制,另外一种是先转换为十进制然后在转换为八进制。

    #----- 手动转换--------#
    # 先转换为二进制,然后转换为八进制
    0xc -> 0b1100 
    100 -> 1*2**2 + 0*2**1 + 0*2**0 = 4
    001 -> 0*2**2 + 0*2**1 + 1*2**0 = 1
    0xc -> 0o14
    # 先转换为十进制,然后转换为八进制
    0xc -> 12*16**0= 12 -> 0o14
    
    #----- Python函数转换--------#
    >>> oct(0xc)
    '0o14'
    >>> oct(int("0xc",16))
    '0o14'
    >>> oct(int(0xc))
    '0o14'
    
  3. 十六进制转十进制

    十六进制数第0位的权值是16的0次方,第1位的权值是16的1次方,依次类推,权值乘以相应系数并相加即可得到十进制数。

    #----- 手动转换--------#
    0xc -> 12*16**0 = 12
    
    #----- Python函数转换--------#
    >>> int("0xc",16)
    12
    >>> int(0xc)
    12
    

总结

  • Python进制转换函数,bin二进制、oct八进制、int十进制、hex十六进制
  • 十进制转二进制,除2取余法
  • 十进制转八进制,除8取余法
  • 十进制转十六进制,除16取余法
  • 二进制转十进制,各位数*2^n,然后相加
  • 八进制转十进制,各位数*8^n,然后相加
  • 十六进制转十进制,各位数*16^n,然后相加
  • 八进制与十六进制之间的转换的两种方法。
    • 第一种:先转成二进制然后再相互转换。
    • 第二种:先转成十进制然后再相互转换。

你可能感兴趣的:(python)