Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python中表达式int('0x10, 36)的值是。。。

Python中表达式int('0x10, 36)的值是。。。

作者头像
Python小屋屋主
发布于 2018-04-16 07:58:02
发布于 2018-04-16 07:58:02
1K0
举报
文章被收录于专栏:Python小屋Python小屋

Python中,int()可用来把实数转换为整数,或者把数字字符串按指定进制转换为十进制数,详见文末的相关阅读。

然而,下面的代码又应该如何解释呢?

>>> int('0x10', 36) 42804

按照传统意义的解释,0x开头表示十六进制,而试图把十六进制数看作36进制数并转换为十进制数,上面的代码应该出错,但是却又没有出错。把'0x10'当作36进制,那么x又表示什么呢?执行下面的代码试试:

>>> import string >>> for ch in string.ascii_lowercase:

print(ch, int(ch, 36))

a 10 b 11 c 12 d 13 e 14 f 15 g 16 h 17 i 18 j 19 k 20 l 21 m 22 n 23 o 24 p 25 q 26 r 27 s 28 t 29 u 30 v 31 w 32 x 33 y 34 z 35

看到这里,似乎应该想到了一个问题,Python的int()函数的第二个参数为啥要限制为0或2-36呢?上面的代码应该可以解释这个问题。对于N进制的数字,每一位上的数字应该介于0和N-1之间。

  • 二进制数的每一位只能为0或1。
  • 八进制数的每一位只能是0到7之间的数字。
  • 十进制数的每一位只能是0到9之间的数字。
  • 十六进制数的每一位只能是0到9之间的数字或a到f之间的字母,其中a代表10,b代表11,以此类推,f表示15。

那么有没有可能利用字母f后面的字母来代表数字呢?这个问题一般不会有人去想,但是如果确实要这样做的话,是可以的。那就是g代表16,h代表17,i代表18,以此类推,x代表33,y代表34,z代表35。

>>> int('1m', 16) Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> int('1m', 16) ValueError: invalid literal for int() with base 16: '1m' >>> int('1m', 26) 48 >>> int('0ij', 16) Traceback (most recent call last): File "<pyshell#63>", line 1, in <module> int('0ij', 16) ValueError: invalid literal for int() with base 16: '0ij' >>> int('0ij', 24) 451 >>> int('0ij', 25) 469 >>> 25*18 + 19 469

回到本文最初的问题, int('0x10', 36)的解释应该为:把字符串'0x10'看作36进制数并转换为十进制数,其中x代表数字33,并不表示十六进制数,那么 int('0x10', 36)等价于按权展开式0*36^3 + 33*36^2 + 1*36^1 + 0*36^0 = 42804。

>>> int('0x10', 36) 42804 >>> 33*36**2 + 1*36 42804

最后说明一下,对于int()函数,当第一个参数字符串隐含进制时,第二个参数必须为0,这一点仅适用于二进制、八进制、十六进制并且第二个参数指定的进制小于第一个参数字符串的隐含进制的情况,当第二个参数指定的进制大于第一个参数字符串中所有位字符表示的数字时,不存在这个限制。

>>> int('0b11', 0) 3 >>> int('0b11', 2) 3

>>> int('0b11', 16) 2833

>>> 16*16*11+16+1 2833 >>> int('0b11', 11) Traceback (most recent call last): File "<pyshell#70>", line 1, in <module> int('0b11', 11) ValueError: invalid literal for int() with base 11: '0b11' >>> int('0b11', 12) 1597

>>> int('0o1', 25) 601

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
内置函数--bin() oct() int() hex()
Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer.
用户7798898
2020/09/27
1.4K0
Python3 基础学习之基本数值赋值、类型转换
上一篇介绍了Mac环境的安装,安装完之后,我们需要一个编辑器来写Python代码。为了便于学习,我们可以使用Python自带的IDLE,类似Xcode的playGround。就在Python3文件夹里,打开就行了。
星宇大前端
2019/01/15
6030
巧用python“int”函数
在python中,可以利用关键词“int”实现其他数据类型强制转化为整形数据。不过需要注意,在python2中,有长整型,但是在python3中,无论数字多长,都是整形。
py3study
2020/01/19
2.8K0
Python 中的进制转换
前面诸节所用到的整数、浮点数、分数,均是“十进制”的数,这符合数学和日常生产生活的多数习惯。而计算机则不然,它使用的是二进制(参阅第1章1.2节)。从数学角度看,用于实现记数方式的进位制除了十进制、二进制之外,还有八进制、十六进制、六十进制等。同一个数字,可以用不同的进位制表示。在数学和计算机原理的资料中,会找到如何用手工的方式实现各种进位制之间的转换——这些内容不在本书范畴,此处重点介绍使用 Python 内置函数实现进制转换,并由此观察一个貌似“ bug ”的现象。
老齐
2021/09/15
2.4K0
Python 转化
返回一个由 range(start, stop, step) 指定索引集的 slice 对象,代码可读性变好。
double
2020/05/11
2.2K0
Python体系练手项目200例(附源代码),练完可显著提升python水平(鲲鹏编程–Python教育新物种)
int(x, base =10) x 可能为字符串或数值,将 x 转换为整数。 如果参数是字符串,那么它可能包含符号和小数点。如果超出普通整数的表示范 围,一个长整数被返回。
全栈程序员站长
2022/07/22
3.6K0
Python体系练手项目200例(附源代码),练完可显著提升python水平(鲲鹏编程–Python教育新物种)
python学习笔记(3) -- 常用数
(4)原始字符串 原始字符串用于显示字符串原来的意思,不让转义字符生效。用 r 或 R来定义原始字符串。 例如:
py3study
2020/01/07
7470
Java基础知识及细节之进制
​ 公式:除基取余使用源数据,不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。
小炜同学
2022/08/20
4030
Java基础知识及细节之进制
Built-in Functions(p
    在python中有很多的内置函数,这些内置函数让我们更高效,在此将部分相关知识总结一下。
py3study
2020/01/06
4260
计算机常用的数制及编码
我们习惯使用的十进制数是由0、1、2、3、4、5、6、7、8、9十个不同的符号组成,每一个符号处于十进制数中不同的位置时,它所代表的实际数值是不一样的。例如1999年可表示成
张哥编程
2024/12/17
1700
Python字符串内建函数-字符串比较大小
我们都知道数字是能比较大小的,那么数字字符串也能比较大小吗?字母字符串呢?一起来试试吧 。
matinal
2023/10/13
2530
Python进制转换
进制转换: 进制转换是人们利用符号来计数的方法。 进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。 基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。 位权是指,进位制中每一固定位置对应的单位值。 简单转换理念: 把二进制三位一组分开就是八进制, 四位一组就是十六进制 二进制与十进制: (1)二进制转十进制:“按权展开求和” (1011)2=1x2**3 + 0x2**2 + 1x2**1 + 1x2**0=(11)10 规律:个位上的数字的次数是0,十位上的数字的次
py3study
2020/01/06
1.1K0
【愚公系列】2021年12月 Java教学课程 20-Debug和进制的介绍
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
愚公搬代码
2021/12/29
3300
【愚公系列】2021年12月 Java教学课程 20-Debug和进制的介绍
C语言常见的进制转换
生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本篇博客将主要讲述C语言中常见的几类进制转换问题。
用户10923276
2024/03/28
1830
C语言常见的进制转换
Java IDEA Debug&进制&二维数组
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
Lansonli
2021/10/09
7630
【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?
本文对 Java 中的进制转换流程进行了介绍,讲解了十进制转R进制、R进制转十进制的操作过程,并给出了样例代码。
Designer 小郑
2023/08/02
4040
【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换
同样都是数字1111,不同进制下数字的大小不同,第二行代表的是其各位数字十进制下的大小,将各位数字的十进制大小相加即1111在这个进制下转化为十进制的大小,从图中我们可以看出来进制的定义:从右往左一次用各位上的数字乘以这个进制的n次方(n为从右往左以0为首依次++的数字)
s-little-monster
2024/06/06
1300
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换
【基础教程】Python数据类型转换函数大全
虽然 Python 是弱类型编程语言,不需要像 Java 或 C 语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换。
matinal
2020/11/27
4670
5-进制
本文目录 一、十进制 二、二进制 三、八进制 四、十六进制 五、进制总结 六、变量与进制
Python知识大全
2020/02/13
5610
6.python内置函数
1. abs() 获取绝对值 >>> abs(-10) 10 >>> a = -10 >>> a.__abs__() 10 2. all()   参数为可迭代对象,迭代对象为空时,返回True.如果迭代对象的所有元素都为真,那么返回True,否则返回False. all(['python',123]) --->True all([]) --->True all([0]) --->False all(" ") --->True all(1,' ',2,None) --->False 3.a
zhang_derek
2018/04/11
7760
6.python内置函数
相关推荐
内置函数--bin() oct() int() hex()
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档