进制之间的转换并如何使用python写一个快捷的进制转换

您所在的位置:网站首页 10进制转n进制 进制之间的转换并如何使用python写一个快捷的进制转换

进制之间的转换并如何使用python写一个快捷的进制转换

2023-12-05 00:42| 来源: 网络整理| 查看: 265

计算机中的存储数据

        生活中计算数据的时候是按照十进制规则来进行的,十进制的规则是逢十进一

        十进制的符号是由0-9组合成的

        而计算机中数据存储运算的时候,采用的是二进制,二进制只有符号0和1,规则是逢二进一

常见的进制形式

        二进制、八进制、十进制、十六进制

                二进制(0b -- binary)符号集只有 0 和 1

                八进制(0o -- octal)符号集 从 0 到 7

                十进制 符号集是 0到9 

                十六进制(0x -- hexadecimal) 符号集为数字 0 到 9,字母a到f,10则使用a来表示,f表示15 【字母大小写都可以】

进制转换        二进制和十进制之间的转换         二进制转十进制

                规则:按权展开求和

                        以十进制为例:

                                比如数字5678 = 5 * 1000 + 6 * 100 + 7 * 10 + 8 * 1 

                                        【1000/100/10/1都是基于本进制对应位置的权值】

                                            = 5 * 10^3 + 6 * 10^2  + 7 * 10^1 + 8 * 10^0

                                              每位上的权值 = 进制^(位数-1)

                            按照上面的规则,二进制上每位的权值 = 2^(位数-1)

                                        比如:0b1011

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

                                                      = 1         +     2      +  0      +  8

                                                      = 11

                                因为二进制的符号集只有0和1,而0乘以任何数为0,1乘以任何数为数字本身,可以假设所有位置上都是1,二进制数据每位的权值从右到左为1、2、4、8、16、32、64......

                                 所以可以得出另一个方法:

                                        将数据减去离它最近且小于它的2幂数,将差值继续操作,直到插值为0,统计2的幂数有哪些,随后按照从右到左的位置,该位置有幂数的为1,无则为0:

                                        例如 69: = 0b1000101

                                                69 - 64 = 5

                                                 5 - 4 = 1

                                                 1 - 1 = 0

                                按照从右到左的顺序,64 32 16 8 4 2 1 

                                                                    64  32 16 8 4 2 1

                                                                     1   0   0  0  1 0 1

                                   有的地方为1,没有则为0,所以最后结果为0b1000101

十进制转二进制         整数转换规则

                将数据除以2取余数,再将得到的商重复这个操作,直到商为0,将所有的余数逆向拼接,结果就是二进制数据

                示例:68:

                           68/2=34 ---商为34,余为0

                           34/2=17 ---商为17,余为0

                           17/2=8   ---商为8,余为1

                            8/2=4    ---商为4,余为0

                            4/2=2    ---商为2,余为0

                            2/2=1    ---商为1,余为0

                            1/2=0    ---商为0,余取1

                     将最后结果逆向拼接 为 1 0 0 0 1 0 0  则十进制68转二进制结果为0b1000100

        小数部分转换规则

                将数据乘以2取整数部分,再将积的小数部分乘以2取整数部分,重复此操作,直到小数部分为0,将整数部分正序拼接在一起

                        示例:

                                0.175:

                                        0.175 * 2 = 0.25--整数部分为0,所以取0

                                        0.25 * 2 = 0.5--整数部分为0,所以取0

                                        0.5 * 2 = 1.0--小数部分为0,结束操作;整数部分为1,所以取1

                                 正序拼接在一起,最终结果为 0b.001

                        如果数据为68.175,转换为二进制则先把68和0.175分开计算,将结果加在一起,为0b1000100.001

二进制和八进制之间的转换

        八进制最大的数字是7,7转化为二进制为0b111,最大的数字为三位,所以其他的数字三位足够满足。

        二进制转八进制

        转换规则:将二进制数据从右向左每三位一分,左边不足3位在前面补0, 将分出的每一份按权展开求和,将和从左向右拼接在一起就是八进制

        示例: 

                0b110111011

                        每三位一分 为           110  111  011

                        按权求和展开分别为    6     7      3

                        从左到右拼接在一起结果为 0o673

        八进制转二进制

        转换规则:将每位数转化为三位二进制数,将结果拼接在一起即可

        示例:

                0o6754

                    6 --- 0b110

                    7 --- 0b111

                    5 --- 0b101

                    4 --- 0b100

                        正序拼接在一起 结果0b110 111 101 100

十六进制和二进制之间的转换                 二进制转十六进制

                 十六进制最大的数字为f(15),15转化为二进制为四位数(0b1111),所以最大的数字需要四位,其他数字四位足以满足

                   规则:和八进制转换大抵差不多少,是将二进制数据从右向左每四位一分,左边不足4位前面补0, 将分出的每一份按权展开求和,将和从左向右拼接在一起就是十六进制

                    示例: 0b110011010101

                    每四位一分               1100    1101    0101 

                    按权求和展开分别为 12(c) 13(d)     5 

                    从左到右拼接在一起为 0x cd5

                  十六进制转二进制

                   规则:和八进制转换也差不多少,只不过变成四位一分。将每位数转化为四位二进制数,将结果拼接在一起即可

                    示例:0x8ac2

                               8 = 0b1000 

                               a = 0b1010

                               c = 0b1100

                               2 = 0b0010

                              拼接在一起为0b 1000 1010 1100 0010

        八进制转十进制

                0o345 = 5*8^0 + 4*8^1 + 3*8^2

                           =  5       +    32    +   192

                           =  229

直接从右到左按权展开求和

        十进制转八进制

                数据除以8取余数,再用得到的商除以8取余数直到商为0,最后 将余数逆向拼接

                示例:98

                        98/8=12--商为12余数为2

                        12/8=1 --商为1余数为4

                         1/8 =0--商为0余数取1

                        逆向拼接为0o 142

        十六进制转十进制

                0xcb = 11 * 16^0 + 12 * 16^1

                         = 11 + 192 = 203

                也是从右到左按权求和

        十进制转十六进制

                规则:数据除以16取余数,再用商除以16取余数直到商为0,将余数逆向拼接

                      示例:  255                                    255/16 =15 -- 商为15余数为15                                    15/16 =0 -- 商为0余数为15

                                    将余数逆向拼接得到结果为0xff

        八进制和十六进制之间的转换

                规则:八进制和十六进制之间的转换需要以二进制为桥梁进行操作【先转二进制,再做转换】

                示例: oxff

                            转化为二进制为0b011 111 111                             二进制转化为八进制为0o377

使用python写一个快捷的进制转换 src = int(input('请输入数据的进制,比如2、8、10、16:')) # 如果原始数据进制非2、8、10、16则提示没有该机制 if src == 2 or src == 8 or src == 16 or src == 10: # 数据是谁 data = input('请输入数据:') # 目标的进制是谁 dest = int(input('请输入转数据的进制,比如2、8、10、16:')) """ 把数据转化为二进制 操作是bin(整数) 八进制 oct (整数) 十六进制hex(整数) 十进制int(可以为整数也可以为字符串) int(字符串,base=数据是几进制的) """ # 想要完成这个操作 需要先把数据转换十进制 decade_num = int(data,base=src) # 需要判断目的进制是什么 然后做相应的转换 if dest == 2: result = bin(decade_num) elif dest == 8: result = oct(decade_num) elif dest == 16: result = hex(decade_num) elif dest == 10: result = decade_num else: result = '无此进制转换机制' print('转化结果为:',result) else: print('无法转换此进制数据')



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3