Python随笔3:二进制、八进制、十六进制与十进制整数之间的转换

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

Python中整数的进制

Python中的整数默认都是十进制的,其表示方法和我们日常看到的没有不同,任意给定一个正数比如a = 49,都默认变量a代表的是十进制的整数。

Python语言一样可以用二进制、八进制和十六进制来表示整数,与十进制表示法不同,这些进制法的表示需要在整数字面值加一个前缀即可。
十进制demical——无前缀。如338。
二进制binary——0b或OB前缀,如0b1011001。
八进制octal——0o前缀,如0o557。
十六进制hexadecimal——0x前缀,如0x16f。

一、二进制、八进制、十六进制的整数转换为十进制的整数

如何把十进制数number转换成二进制、八进制和二进制的整数?

方法是直接使用Python内置函数bin(number)、oct(number)和hex(number)。
简单而粗暴。

a = 16  #a是一个十进制整数。
bin(a)
Out[39]: '0b10000'
oct(a)  #十进制转换成八进制。
Out[40]: '0o20'
hex(a)  #十进制转换成十六进制。
Out[41]: '0x10'
二、十进制的整数转换为二进制、八进制、十六进制的整数

如何把二进制、八进制和十进制整数x转换成十进制的整数?

同样一个函数就能搞定,但是这个转换相比上面的要略微麻烦一点点。
方法是用int()这个内置函数,可能有人看到这点就觉得没难度了。但,其实这里很容易出错。

一般来说,int()我们用得挺多,一般把一串只有数字的字符串转换为int整数,或者浮点数向零取整。比如:

int('98999')
Out[34]: 98999

type('98999')
Out[35]: str

int('98999')
Out[36]: 98999

type(int('98999'))
Out[37]: int

int(-3.5)
Out[38]: -3

int(3.5)
Out[39]: 3

但是,如果要用int()来进行不同进制之间的转换时,其用法就有了一点变化。
int()的完整语法是
int(x, base=10),关于此函数,官方的解释是这样的:

返回一个基于数字或字符串 x 构造的整数对象,或者在未给出参数时返回 0。
如果 x 不是数字,或者有 base 参数,x 必须是字符串、bytes、表示进制为 base 的 整数字面值 的 bytearray 实例。

换句话说,默认base=10,即十进制;若是base要更改默认情况,比如改成base=2,那么它表示前面的x是二进制整数时,x的类型就有了变化,不能是int整型,而必须是str字符串类型了。

所以,把二进制、八进制和十进制整数x转换成二进制的整数有两种情况:

第一种情况很简单,以二进制转换为十进制为例,把二进制的整数表示为Python语言规定的那样,人觉得别捏但机器能识别的形式:'0b101'。这时直接使用int()函数即可。加了'0b'开头的二进制数,此时就是一个int,可以假设它是用十进制的形式来表示二进制数。

如下面所给的例子:

x = 0b101

type(x)
Out[50]: int  #此时type()作用于二进制整数x时,被识别为int类型。

int(x)
Out[51]: 5

第二种情况复杂一些,但用得可能更多一些。对于人的思维,输入一个八进制数,比如342,会直接输入342,而不会去带前缀'0o'。对于这样的数字,如何转换成二进制才是我们正常思维容易遇到的问题。

前面对int(x, base=10)有过解释,当base不再是默认的10的时候,x不能再是int型数据,而必须转为str字符串类型,此函数才能起作用,否则会报错。拿下面的例子作说明。

把一个八进制的整数754转换成十进制的整数,结果是多少?

x = 754
#把八进制整数754先转换为字符串类型,再使用int()函数。
int(str(x), 8)  
Out[55]: 492

虽然在思维上更容易接受些,但是从实现层面上讲,如果先把754前面加上0o直接表示为Python可识别的八进制整数,再直接使用int()函数会更不容易出错一些。个人更推荐第一种转换方法。

小结

十进制整数number转换为二进制、八进制、十六进制的整数,直接使用Python内置函数bin(number)、oct(number)和hex(number)即可。

二进制、八进制、十六进制整数x转换为十进制的整数,先把它们统一表示为Python可识别的样式,二进制前面加前缀0b,八进制前面加前缀0o,十六进制前面加0x,再直接使用int(x)即可得到所需要的十进制整数。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容