📜  将二进制数转换为十六进制十进制数的程序(1)

📅  最后修改于: 2023-12-03 15:09:34.039000             🧑  作者: Mango

将二进制数转换为十六进制和十进制数的程序

程序介绍

本程序可以将输入的二进制数转换为对应的十六进制和十进制数,并输出转换后的结果。

本程序采用Python语言编写,可以运行于Python 2和Python 3环境中。

程序实现

程序实现的主要思路是将输入的二进制数转换为对应的十进制数,再用十进制数转换为十六进制数的方法将其转换为对应的十六进制数。

将二进制数转换为十进制数的方法

将二进制数转换为十进制数的方法是可以由权展开式表示的。例如,二进制数1011可以表示为:

1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0

将这些数相加即可得到其十进制表示数,即11。

根据这个原理,可以编写如下的Python函数来实现将二进制数转换为对应的十进制数:

def bin_to_dec(binary):
    decimal = 0
    for digit in binary:
        decimal = decimal * 2 + int(digit)
    return decimal

在这个函数中,我们首先初始化十进制数decimal为0,然后使用for循环遍历输入的二进制数,每次将十进制数乘以2之后再加上当前读入的二进制数位,最终得到十进制数的值。

将十进制数转换为十六进制数的方法

将十进制数转换为十六进制数的方法是采用除法取余的方法。例如,十进制数255可以表示为:

255 = 15 * 16^1 + 15 * 16^0

因此,将255转换为十六进制数时,可以依次取255除以16,得到商和余数15和15,之后再将商除以16,重复以上步骤即可。

根据这个原理,可以编写如下的Python函数来实现将十进制数转换为对应的十六进制数:

def dec_to_hex(decimal):
    hex_digits = "0123456789ABCDEF"
    remainder_stack = []
    while decimal > 0:
        remainder = decimal % 16
        remainder_stack.append(remainder)
        decimal //= 16
    hex_number = ""
    while remainder_stack:
        hex_number += hex_digits[remainder_stack.pop()]
    return hex_number

在这个函数中,我们首先定义了一个包含0~15数字的字符串hex_digits,然后使用while循环将输入的十进制数依次除以16取余,将余数存储于list类型的remainder_stack中。之后,我们再通过循环遍历remainder_stack,将其转化为对应的十六进制数位,并拼接为最终的十六进制数。

完整代码实现

将二进制数转换为十六进制和十进制数的完整代码如下:

def bin_to_dec(binary):
    decimal = 0
    for digit in binary:
        decimal = decimal * 2 + int(digit)
    return decimal

def dec_to_hex(decimal):
    hex_digits = "0123456789ABCDEF"
    remainder_stack = []
    while decimal > 0:
        remainder = decimal % 16
        remainder_stack.append(remainder)
        decimal //= 16
    hex_number = ""
    while remainder_stack:
        hex_number += hex_digits[remainder_stack.pop()]
    return hex_number

if __name__ == "__main__":
    binary = input("请输入二进制数:")
    decimal = bin_to_dec(binary)
    print("对应的十进制数为:", decimal)
    hex_number = dec_to_hex(decimal)
    print("对应的十六进制数为:", hex_number)

在这个程序中,我们首先读入输入的二进制数,接着调用bin_to_dec函数将其转化为对应的十进制数,再调用dec_to_hex函数将其转换为对应的十六进制数。最后,将结果打印输出即可。

程序测试

我们可以使用一些测试用例来测试本程序的准确性:

  • 输入二进制数1011,应输出对应的十进制数11和十六进制数B。
  • 输入二进制数111000,应输出对应的十进制数56和十六进制数38。
  • 输入二进制数10101010,应输出对应的十进制数170和十六进制数AA。

在测试过程中,本程序正确输出了以上所有测试用例中的十进制数和十六进制数,证明了其正确性。