• Python中的进制转换


    活动地址:CSDN21天学习挑战赛

    今天闲下来刷刷题,偶然刷到了Python的进制转换,就浅浅的学一学,特地记录如下。

    题目链接:NP9 十六进制数字的大小

    十进制是我们常用的数字形式,但机器使用的却是二进制,八进制,十六进制之类的,所以进制转换是基础要求,很多编程语言提供的有进制转换的方法,下面来扒一扒利用Python如何进行进制转换~

    这里先说一个知识点:进制前面一般会有一个符号,这个符号表明了到底是多少进制。比如:

    • 二进制前面的符号是0b
    • 八进制前面的符号是0o
    • 十六进制前面的符号是0x
    • 十六进制前面一般没有符号。

    int()bin()hex()进制转换

    [n]进制转换为十进制

    Python里面转换为十进制的函数是int,这个函数相信用Python的都应该用过,可以将浮点数转换成整数。这里提到了,多说一句,要注意int函数是强行舍掉小数部分~看下面的例子:

    >>> int(3.9)
    3
    >>> int(-3.9)
    -3
    
    • 1
    • 2
    • 3
    • 4

    要注意和floor()函数区分,floor()函数是向下取整,其余的函数就不多说了。

    >>> import numpy as np
    >>> np.floor(3.9)
    3.0
    >>> np.floor(-3.9)
    -4.0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    回到今天的主题,int函数可以用于进制转换,其第一个参数是一个字符串,第二个参数是字符串的进制。

    1. 二进制转十进制
    >>> num = "10010010"
    >>> int(num, 2)
    146
    
    • 1
    • 2
    • 3
    1. 八进制转十进制
    >>> int("7", 8)
    7
    >>> int("17", 8)
    15
    >>> int("33", 8)
    27
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 十六进制转十进制
    >>> int("A", 16)
    10
    >>> int("AB", 16)
    171
    
    • 1
    • 2
    • 3
    • 4

    十进制转十六进制

    hex()函数用于将10进制整数转换成16进制,返回16进制数以字符串形式表示。0x是十六进制的标志。

    >>> hex(10)
    '0xa'
    >>> hex(13)
    '0xd'
    >>> hex(255)
    '0xff'
    >>> type(hex(255))
    <class 'str'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    十进制转二进制

    bin()函数返回一个整数 int 或者长整数 long int 的二进制表示。故用bin()就可实现该需求,其用法和hex()函数类似,0b是二进制的标志。

    >>> bin(1023)    #十进制转换为二进制
    '0b1111111111'
    >>> bin(0o11)    #八进制转换为二进制
    '0b1001
    >>> bin(0xa1)    #十六进制转换为二进制
    '0b10100001'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    十进制转八进制

    oct()函数可以将任何进制的数变成八进制0o是八进制的标志。

    >>> oct(0b11)    #二进制转换为八进制
    '0o3'
    >>> oct(0o77)    #八进制转换为八进制
    '0o77'
    >>> oct(505)    #十进制转换为八进制
    '0o62'
    >>> oct(0xab)    #十六进制转换为八进制
    '0o253'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如果是二进制转十六进制,可以先转十进制再转十六进制,其它的也是类似的。

    format()进制转换

    format()函数是可以实现进制转换的,主要用法如下:

    format(x,'b')         #将x转换为二进制
    
    format(x,'o')         #将x转换为八进制
    
    format(x,'d')         #将x转换为十进制
    
    format(x,'x')         #将x转换为十六进制
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    举一点例子:

    >>> format(0o31, 'b')   # 转换为二进制
    '11001'
    >>> format(85, 'o')     # 转换为八进制
    '125'
    >>> format(88, 'x')     # 转换为十六进制
    '58'
    >>> format(0b101011, 'd')  # 转换为六进制
    '43'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    自定义进制转换

    是不是觉得调用内置函数不够酷?亦或者网络内置进制转换函数怎么办?下面来试试自定义的进制转换函数!

    自定义:十六进制转十进制

    def six_to_ten(num):
        res = 0
        num = list(reversed(str(num)))
        for i in range(len(num)):
            res += int(num[i]) * (16 ** i)
        return res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    测试:

    >>> six_to_ten(435)
    1077
    
    • 1
    • 2

    自定义:十进制转换成[n]进制

    def ten_to_seven(num, k=2):
        s = ""  # 记录余数
        
        if num == 0:  # 先判断是否为0,如果为0,直接返回0
            return 0
        elif num > 0:  # 判断正负性,如果为正数,不记录
            a = ''
        else:  # 如果为负数,记录为负号
            a = '-'
            
        while abs(num):  # 当num为0时,循环结束
            # 倒叙记录余数,注意,是倒叙记录
            s, num = str(abs(num) % k) + s, abs(num) // k  # num整除除进制数
            
        return int(a + s)  # 先将符号位和余数进行合并,再转换为int类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试:

    >>> ten_to_seven(10, 2)
    1010
    >>> ten_to_seven(10, 8)
    12
    >>> ten_to_seven(10, 16)
    10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    需要注意,还是应该了解一下进制之间是如何转换的,不能盲目的用轮子,还是得适当的学会造轮子~

    \quad
    \quad
    \quad

    THE END

  • 相关阅读:
    CSS常用背景属性
    ppt录屏没有声音?超实用教程来了!
    Java容器之set
    Mac喵影工厂Wondershare Filmora X
    深度剖析Vue2、Vue3响应式原理 | 逐步推敲手写响应式原理全过程
    【Linux】 ubuntu系统安装图形化界面
    微服务之间调用的安全认证-jwt
    定义爬虫规则和数据存储
    YOLOV8目标检测——最全最完整模型训练过程记录
    table组件,前端如何使用table组件,打印数组数据,后端传输的数据应该如何打印
  • 原文地址:https://blog.csdn.net/qq_37085158/article/details/126305996