APP下载

常见进制转换的Python求解

2022-08-31蒋芋言

电脑报 2022年33期
关键词:取模数字电路字符串

蒋芋言

我们在编程学习中必然会用到进制的转换,常见的进制有二进制、八进制、十进制和十六进制。

二进制,计算机作为一个数字电路的产物,它能直接识别的语言就是二进制,二进制就是只有0和1两个数字,这两个数字就代表着数字电路的导通和截止两个状态,就像一个开关一样。八进制和十六进制,主要是为了简化二进制繁琐的表现形式。

十进制则是我们日常使用的。

利用Python自带的函数或者是求商求余去实现常见进制间的相互转换。

这里我们使用Python的内置函数int,int函数的输入是一个任意进制的数,输出是它的十进制形式,格式为int (x,base),x是纯数字或者字符串,base是进制数,是对x是几进制的描述。

输出为2,31,17,31,8。

当我们需要带小数的进制转换的时候会出现问题,print(int(2.5))得到的结果是2,而不是2.5;以及print(int(‘2.5’,10)),会直接报错,不允许输入为小数的字符串。

Python中已经为我们封装好了相应的函数,我们只需要提前知道各个进制的英文名称,然后在代码中使用缩写即可,二进制bin(binary)、八进制oct(octonary)、十进制dec(decimalism)、十六进制hex(hexadecimal)

在这里十进制数我们用10举例子

输出为

有人可能要问了,为什么10的二进制是0b1010而不是1010呢?明明应该是后者啊。这里就涉及计算机中数字显示的问题了,在计算机中,如果显示的结果数字是以二进制表示的,会显示为0+bin+真实的结果,八进制就是0+o+真实的结果,十六进制就是0+x+真实的结果,大家看懂了吗?

有人可能又要提出疑问了,标题不是任意进制吗?那我五进制、六进制这种没有提前准备好的函数怎么办呢?这里就需要我们进行特殊处理

我们要进行十进制转换只需要调用funciton函数即可,x表示输入的十进制数,y表示需要的进制

輸入:function(10,5)

输出:20

(1) a是输出用的数字、字母库,b是用来存放要用的数字或字母。

(2) 首先输入x,y对x求商,如果是0,表示进制数直接比数字x大,然后直接输出x在a库里的值。

(3) 对x求商如果不是0,y对x取余后的值赋给b,一直进行while循环,直至y对x取商为0,跳出循环。

(4) reverse函数的作用是将表b里面的内容反向排序,至于为什么是倒序呢?是这样的,第一次y对x取模,相当于y的零次方,位于进制转换后的最低位,第二次y对x取模,相当于y的一次方,位于进制转换后的倒数第二位,以此类推,这样我们最后得到的b是反过来的,所以使用reverse函数就能获得我们的答案了。

代码本身具有局限性,只能表示到十六进制,更高的进制需要用更多的英文字母去表示,这里没有再进行列举。

3. 二进制、八进制、十六进制三者间的转换

其实我们把前面讲过的几个函数(int函数、oct函数等)稍作结合就可以达到这个目的,其核心在于用十进制作为转换的桥梁。

输出结果为

1. 前面用到的进制转换十分依赖int、bin、oct、hex等进制转换函数,其实完全可以利用上面提到的任意进制转换,利用求商求余,去等效实现这几个函数的作用。

2.对小数的进制转换没有涉及。

猜你喜欢

取模数字电路字符串
关于不定方程x2-pqy4=16的正整数解
关于商高数的Jeśmanowicz猜想*
关于不定方程x2-8y4=M(M=17,41,73,89,97)*
基于文本挖掘的语词典研究
基于数字电路的定时器的设计
关于不定方程x2-5y4=236
MATLAB在数字电路教学中的应用
基于数字电路的密码锁设计与实现
数字电路实验的设计分析
一种新的基于对称性的字符串相似性处理算法