• Python中不同进制间的转换


    Python中不同进制间的转换

    一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用:
    1. 二进制(base-2): 在计算机系统中,数据以二进制形式存储和处理。二进制由0和1组成,是数字电子技术的基础。
    2. 十进制(base-10): 十进制是我们平常使用的数字系统,它由0到9这些数字组成。十进制在日常生活中用于计算和表示数量。
    3. 八进制(base-8) 八进制使用0到7这几个数字表示数值。它在计算机编程中经常用于表达特殊位模式、字节权限和文件权限等。
    4.十六进制(base-16): 十六进制使用0到9的数字和A到F的六个字母表示数值。它在计算机科学中被广泛用于表达内存地址、颜色代码和二进制数据的可读形式。

    进制转换: 在计算机科学中,需要进行不同进制之间的转换。例如,将十进制数转换为二进制或十六进制,或者将二进制数转换为十进制。

    除了上述应用外,进制还在信息理论、密码学、逻辑电路设计和图形处理等领域中发挥着重要作用。进制概念的灵活运用可以增强数据表示和处理的效率,以及解决特定问题所需的编程技巧。

    二、在Python中,可以使用以下函数进行不同进制之间的转换:
    1.bin(): 将整数转换为二进制字符串。

    print(bin(10))  # 输出: '0b1010'

    2.oct(): 将整数转换为八进制字符串。

    print(oct(10))  # 输出: '0o12' 

    3.hex(): 将整数转换为十六进制字符串。

    print(hex(10))  # 输出: '0xa'

    4.int(): 将字符串按指定进制转换为整数。

    1. print(int(1010,2))  # 输出: 10
    2. print(int(1010,8))  # 输出: 10
    3. print(int('a',16))  # 输出: 10

    这些函数可用于在不同进制之间转换数字。bin()、oct()和 hex()函数将整数转换为相应进制的字符串,而 int()函数将指定进制字符串转换为整数。

    三、在Python直接使用函数进行进制转换非常方便快捷。但对于初学者来说,还是要认真学习进制转换的底层运算原理。

    将十进制数转换为任意进制(base)的原理是取余操作。
    首先,我们从给定的十进制数开始。然后,通过连续地进行“整除并记录余数”的操作,获得在指定进制下各个位上的数字或字符。这个过程持续到十进制数变为0为止。
    具体操作步骤如下:
    1. 将给定的十进制数除以指定的进制(base),并记录所得的商和余数。
    2. 将余数对应的数字(如果是大于9的数字,则对应于字母)作为 base 进制数的最低位值。
    3. 将商继续除以指定进制,并将该步骤中得到的余数添加到首位。重复此步骤直到商变为零。
    4. 得到的结果就是将十进制数转换为 base 进制的表达形式。
    例如,将十进制数 10 转换为二进制(base=2),我们可以执行以下步骤:

    10 ÷ 2 = 5 余 0    0
    5 ÷ 2 = 2 余 1      10
    2 ÷ 2 = 1 余 0      010
    1 ÷ 2 = 0 余 1      1010

    从最后一步开始,我们依次读取每个余数,结果就是二进制数 1010。因此,10二进制表示为 1010。

    同样的原理适于将十进制数转换为任意指定的 base 进制。根据不同的进制,可使用不同的数字或字符表示位值。这种整除和取余的方法使我们能够在将任意十进制数转换为各种进制时进行有效的计算和转换。
    以下是使用循环手动实现进制转换的示例代码:

    1. # 将10进制数decimal转换为base进制的函数
    2. def decimal_to_base(decimal, base):
    3. if not isinstance(decimal, int) or not isinstance(base, int) or base < 2:
    4. raise ValueError("Invalid inputs") # 检查输入是否有效,如果无效则引发异常
    5. digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存储各个位上的数字或字母
    6. if decimal == 0:
    7. return '0' # 如果十进制数为0,则直接返回字符串'0'
    8. result = ''
    9. negative = False
    10. if decimal < 0:
    11. negative = True
    12. decimal = abs(decimal) # 处理负数情况,转换为正数进行计算
    13. while decimal > 0:
    14. remainder = decimal % base # 取余数
    15. result = digits[remainder] + result # 将余数对应的字符拼接到结果字符串的左侧(考虑进制转换后顺序倒过来)
    16. decimal = decimal // base # 整除以进行下一位的计算
    17. if negative:
    18. result = '-' + result # 如果原始数是负数,则在结果字符串前添加负号
    19. return result # 返回转换后的结果字符串
    20. # 调用函数进行测试
    21. print(decimal_to_base(10597059, 16)) #输出结果:A1B2C3
    22. print(decimal_to_base(10597059, 8) #输出结果:50331303
    23. print(decimal_to_base(10597059, 2)) #输出结果:101000011011001011000011

    以上函数可以将一个十进制数转换为任意指定进制的字符串表示形式。只需传递要转换的十进制数和目标进制作为参数即可。

    将任意进制(base)数转换为十进制的原理是加权求和。
    从给定的 base 进制数的最低位开始,将每个位的值乘以对应的权重,并对所有位的结果进行累加。权重由 base 的幂决定,从右到左逐渐递增。
    具体的步骤如下:
    1. 从给定的 base 进制数的最低位开始,将每个位的值与重相乘。
    2. 对所有位的乘积求和,得到最终的十进制表示。

    例如,将二进制数 1010 转换为十进制,可以执行以下步骤:
    (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
    = 8 + 0 + 2 + 0
    = 10

    因此,二进制数 1010 在十进制表示为 10。

    同样的原理适用于将任意指定的 base 进制数转换为十进制。根据每个位上的值和对应的权重,可以通过加权求和的方法有效地计算和转换为十进制。这种加权求和的方法使我们能够在将各种进制转换为十进制时进行有效的计算和转换。

    以下是使用循环手动实现将任意进制转换为10进制的代码:

    1. # 将base进制数number转换为10进制的函数
    2. def base_to_decimal(number, base):
    3. if not isinstance(number, str) or not isinstance(base, int) or base < 2:
    4. raise ValueError("Invalid inputs") # 检查输入是否有效,如果无效则引发异常
    5. digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存各个位上的数字或字母
    6. number = number.upper() # 将输入的字符串转换为大写,以便与 digits 字符串中的字符进行匹配
    7. decimal = 0 # 初始化十进制数为0
    8. power = 0 # 初始化权重(指数)为0
    9. for digit in reversed(number): # 对于从右到左的每个数字字符
    10. if digit not in digits or digits.index(digit) >= base:
    11. raise ValueError("Invalid input") # 如果字符不在 digits 中或其索引超过等于指定 base 的范围,则引发异常
    12. decimal += digits.index(digit) * (base ** power) # 将该位上的值乘以权重,并将其累加到当前的十进制数中
    13. power += 1 # 增加权重(指数)
    14. return decimal # 返回转换后的十进制数
    15. # 调用函数进行测试
    16. print(base_to_decimal("A1B2C3", 16)) #输出结果:10597059
    17. print(base_to_decimal("50331303", 8)) #输出结果:10597059
    18. print(base_to_decimal("101000011011001011000011", 2)) #输出结果:10597059

    以上函数可以将任意进制的数字字符串转换为十进制。只需传递要转换的数字和当前进制作为参数即可。

  • 相关阅读:
    chrome事件循环的自问自答
    在Linux中部署运维监控系统WGCLOUD
    android P MediaCodec编解码流程分析
    肝了4天,终于把Vue3编译原理之transform憋出来了
    数据中台工具的选型要点_光点科技
    关于dubbo快速开发和服务提供者无法注册上注意点
    史上最强HashMap源码深度解析(3w字图文并茂)
    一文教你在IDEA中使用Git
    MES管理系统在生产中的应用及智能工厂的构建思路
    LeetCode 面试题 08.05. 递归乘法
  • 原文地址:https://blog.csdn.net/lybc2019/article/details/131328490