进制转换(用Python实现进制转换器)

进制类型

进制可以分为以下几种类型;
1.1 二进制 字母B表示
1.2 八进制 字母O表示
1.3 十进制 字母D表示
14.4 十六机制 字母H表示

二进制:逢二进一,只有数字0 1
与十进制的换算关系如下;

  1. 十进制转换为二进制(整数)
    (最后一个一可以直接写上去)在这里插入图片描述
    2.十进小数制转二进
    在这里插入图片描述
    (如果是负数的话只需要在前面加入负号即可)
    1.3二进制转十进制整数
    在这里插入图片描述

1.4二进制转十进制小数
在这里插入图片描述
八进制(0,1,2,3,4,5,6,7)
十六进制 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
在八进制与十六进制之间转换为十进制都是一样的。
具体的可以看到如下python代码

'''用于二进制转换学习的练习代码相关代码和更多笔记教程可在 https://blog.csdn.net/FUTEROX 获取'''
'''多造轮子多学习 '''
def int_to_B(input_):
    '''对十进制数进行公式运算处理整数部分'''
    flag=True
    x=[]
    qu_mo = input_
    qu_yu = input_
    while flag:
        qu_yu=qu_mo%2
        x.append(qu_yu)
        qu_mo=qu_mo//2
        if qu_mo==1:
            x.append(qu_mo)
            flag=False
    number_int=''
    for i in x[::-1]:
        number_int=number_int+str(i)
    return number_int
    #此时返回的是一个整数部分的二进制数字
    #print(number_int)


def float_to_B(f,jindu=4):
    '''默认精度为四'''
    B=[]#存放整数部分
    for i in range(jindu):
        f=f*2
        b_zhengshu=int(f)
        B.append(b_zhengshu)
        if b_zhengshu !=0:
            f=f-b_zhengshu
    float_n=''
    for i in B:
        float_n=float_n+str(i)
    return float_n




if __name__=="__main__":

    print("欢迎使用进制转换工具")
    print('如果你想退出请按Q(必须为大写)')


    flag=True
    while flag:
        input_ = str(input("请你输入一个十进制的数字;"))
        if input_=="Q":
            #防止用户误操作必须使用大写字母Q退出
            print("感谢你的使用!!!")
            flag=False

        '''对输入的数字进行判断是否为整数还是小数
        如果是小数则对她进行分割,由于英文水平的问题,
        变量名多采用中文拼音进行命名'''

        if "." in input_:

            nub = []
            for i in input_:
                nub.append(i)
            if nub[0] != '0':
                way_point = nub.index(".")
                int_ = nub[0:way_point]
                int_un = ''
                for i in int_:
                    int_un = int_un + str(i)
                # print(int_un)
                int_input = int(int_un)
                int_part = int_to_B(int_input)

                float_ = nub[way_point:]
                float_part = ''
                for i in float_:
                    float_part = float_part + str(i)
                float_part = "0" + float_part
                float_part = float(float_part)
                float_part = float_to_B(float_part)

                # 开始整合字符串,两个函数运算后产生的都是字符串类型
                last_number = int_part + '.' + float_part
                last_number = float(last_number)
                print(last_number)
            elif nub[0] == '0':
                number = float_to_B(float(input_))
                number = '0.' + number
                number = float(number)
                print(number)



        elif "." not in input_ and input_!="Q":
            input_ = int(input_)
            reason = int(int_to_B(input_))
            print(reason)

在这里插入图片描述
可以看到上面的算法将十进制转化为了二进制,那么其实只需要将% 2和 //2换成 %8,//8等等。
在这里插入图片描述

不同进制间的转换

1.1二进制 → 八进制
先,看到下图的对应表
在这里插入图片描述
例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:

  1. 小数点前111 = 7;

  2. 010 = 2;

  3. 11补全为011,011 = 3;

  4. 小数点后010 = 2;

  5. 011 = 3;

  6. 1补全为100,100 = 4;
    在这里插入图片描述

当然你也可以二进制换十进制再换八进制。

1.2 八进制 → 二进制

方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

例:将八进制的(327)O转换为二进制的步骤如下:

  1. 3 = 011;

  2. 2 = 010;

  3. 7 = 111;

  4. 读数,读数从高位到低位,011010111,即(327)O=(11010111)B
    在这里插入图片描述

1.3 八进制 → 十六进制

方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。

例:将八进制的(327)O转换为十六进制的步骤如下:

  1. 3 = 011;

  2. 2 = 010;

  3. 7 = 111;

  4. 0111 = 7;

  5. 1101 = D;

  6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。
    在这里插入图片描述
    etc…

二进制加减(补充)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FUTEROX/article/details/108806152