查看原文
其他

万般进制千机变,Python一计乾坤定——利用Python来进行进制转换

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:周宏杰

文字编辑:王碧琪

技术总编:张    邯


 爬虫俱乐部将于2019年8月22日至28日湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~

详细培训大纲及报名方式,请点击文末阅读原文呦~


一、进制起源介绍

(一)十进制起源介绍

十进制作为日常生活中使用最普遍的进制,拥有着古老的起源,据考古研究发现,在距今五千年前,现伊朗境内存在着十进制记数出现的痕迹——小泥椎体记数法。从古至今,其实不止出现过十进制一种记数法,还出现过五进制、二十进制、六十进制。不过为什么只有十进制留存下来?据说最大的可能是因为十进制符合人类有十根手指的特点,人类可以便捷地使用自身身体来记数,换句话说如果人类是有十二、十三根手指,那么现在最流行的计数法可能就是十二或者十三进制了。

(二)二进制、八进制、十六进制起源介绍

相比于拥有古老历史的十进制,二进制只有三百多年的历史。二进制由德国天才大师莱布尼茨创造,在他短短几页的手稿中精炼描述了这个美妙精密的进制系统。他曾写下如下的话:“1与0,一切数字的神奇渊源。这是造物的秘密美妙的典范,因为,一切无非都来自上帝。”二进制发展如此迅速,是因为计算机能够便捷地使用它。计算机是由逻辑电路组成,逻辑电路通常只有两个状态,通电或者断电,二进制中的唯二两数“1”“0”正好能分别完美地表示这两种状态。不过由于二进制数的长度过长(进制越小,数的长度越长),占用内存过大。为了缩短数的长度,减少内存的占用,计算机科学家发明了八进制和十六进制,因为八和十六正好是二的三次方和四次方,所以二进制与八进制和十六进制之间能够很方便地进行转化。

二、二进制、八进制、十六进制概念介绍

对于每一种进制,都分为基数和运算规则两个部分。

基数,顾名思义就是进制中基础的数字,其特点是不可再拆分。二进制的基数是0、1,八进制的基数是0~7,十六进制的基数是0~F(即0~9+A~F,A代表十进制中的10,B代表11,以此类推,F代表15)。下面列出四种进制的基数对比表,让各位小伙伴能更好地理解。

运算规则:十进制的运算规则是“满十进一,借一当十”;二进制的运算规则是“满二进一,借一当二”;八进制的运算规则是“满八进一,借一当八”;十六进制的运算规则是“满十六进一,借一当十六”。

十进制转化成其他进制:以二进制为例,十进制整数除以2取余,若商数不小于2,再对商数除以2,重复这个过程直到商小于2,此时以最后一个商数为最高位,第一个余数为最低位,以这个为方向,将剩下的余数排列并补充入开头商数到结尾余数中间,得到对应的二进制数,例如:7/2=3……1, 3/2=1……1,也就是说7的二进制为111。十进制转化成八进制和十六进制与上述过程相似,只要把2的位置改成8或16就行。

其他进制转化成十进制:以二进制为例,一个整数从右到左,依次列为1、2~n,然后将第n位的数乘2的(n-1)次方,之后把所有积相加得到对应的十进制数。(例如:111,1*2^2+1*2^1+1*2^0=7)。八进制和十六进制转化成十进制与上述过程相似,只要把2的位置改成8或16就行。

 

相信各位小伙伴看到这里,会想到简单的十进制数很容易转化成其他进制数,但是若是我们想把一个复杂的数转化进制,肯定不能用手算,那该如何做呢?接下来,小编将向大家介绍如何使用Python来解决复杂的数转化进制。

三、Python中的进制转换

(一)Python中各进制的数的表示

在十进制、二进制、八进制、十六进制中,如果在不指明某个数使用的进制的情况下,是很难分清该数的大小的,比如111,在十进制、二进制、八进制、十六进制中都是可能存在的,但是其含义是不相同的。因此需要一些符号来区分出它们的身份。在Python中,会在二进制数前端加上0b(binary),在八进制数前加上0o(octonary),在十六进制数前加上0x(hexadecimal)(注意这里都是数字0)。

(二)bin(),oct(),hex()介绍

Python的内置函数中有现成的bin()、oct()、hex()可以解决十进制向二进制、八进制、十六进制转化的问题。

bin()来源于binary(二进制),其作用是把十进制整数转化成二进制。

oct()来源于octonary(八进制),其作用是把十进制整数转化成八进制。

hex()来源于hexadecimal(十六进制),其作用是把十进制整数转化成十六进制

它们的语法结构相同:command(x),其中x为一个int变量。

注意:上述函数中只能输入整数,也就是说Python不能转化小数为其他进制。

接下来,我们看看如何在Python中使用上述函数来把十进制整数转化为其他进制。为了更好地展示这个过程,小编编了一个程序,具体命令行如下所示:

def transform(num,system): if type(num)==int: if system == 1: print(str(num)+'转化成二进制是:'+str(bin(num))) elif system == 2: print(str(num)+'转化成八进制是:'+str(oct(num))) elif system == 3: print(str(num)+'转化成十六进制是:'+str(hex(num))) else: print('只能输入1、2、3') else: print('请输入整数')num=eval(input('请输入需要转化的十进制整数:'))system=eval(input('请输入想要转化的进制\n (1为二进制,2为八进制,3为十六进制):'))transform(num,system)

假设我们想要把十进制的100转化成十六进制,我们可以在控制台中输入100和3,结果如下:

当然,能够由十进制转化成二进制、八进制、十六进制,我们就能进行逆运算,把二进制、八进制、十六进制转化成十进制。其实,这个操作更加简单。

若想把二进制整数a、八进制整数b、十六进制整数c分别转化成十进制,则需要先把a、b、c转换为字符串,再在a、b、c前分别加上"0b"、"0o"、"0x",再利用int()转换,例如:print(int('0b'+'101',2)),输出为十进制的5。为了让各位小伙伴更好地理解,小编编了一个交互程序,具体命令行如下所示:

def transform(num,system): if type(num)==int: if system == 1: print('二进制的'+str(num)+'转化为十进制是'+str(int('0b'+str(num),2))) elif system == 2: print('八进制的'+str(num)+'转化为十进制是'+str(int('0o'+str(num),8))) elif system == 3: print('十六进制的'+str(num)+'转化为十进制是'+str(int('0x'+str(num),16))) else: print('请输入1、2、3') else: print('请输入整数')num=eval(input('请输入需要转化为十进制的整数:'))system=eval(input('请输入想要该数字的原进制\n (1为二进制,2为八进制,3为十六进制):'))transform(num,system)

我们在控制台中输入64,3,结果如下图:

至此,进制和在Python中如何转化进制已经介绍完了,相信各位小伙伴看到这,对于进制和在Python中如何转化进制有了一定的了解,如果各位小伙伴想了解更多关于Python然后转化进制以及Python方面的知识,可以关注我们的公众号,经常到我们的公众号逛逛哦。


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

 手持Python,斗图不输!

        朝花夕拾——cnstock与cntrade强强联合

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存