进制之间的转换并如何使用python写一个快捷的进制转换 |
您所在的位置:网站首页 › 10进制转n进制 › 进制之间的转换并如何使用python写一个快捷的进制转换 |
计算机中的存储数据
生活中计算数据的时候是按照十进制规则来进行的,十进制的规则是逢十进一 十进制的符号是由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 |