python整数类型进制表示_Python二进制、八进制、十六进制数字的表示和转换

除了常用的十进制表示法,Python 也支持二进制、八进制和十六进制表示法。这些只是表示方法不同,但是它们表示的含义是一样的,如二进制中的 11 和十进制数中的 3 是一样的。

1. Python 二进制表示法

如十进制中的 100 用二进制表示就是 1100100,那么 100 就可以用 0b1100100 来表示。

>>> a = 0b1100100 # 二进制1100100

>>> a # 查看其值,默认用十进制表示

100 # 对应到十进制就是100

用 0B 也可以表示二进制数,效果和 0b 是一样的,如十进制的 100 也可以用 0B1100100 来表示。

>>> a = 0B1100100

>>> a

100

另外一个问题就是,如果知道了某个数的值,如何知道其二进制的表示法?Python 提供了一个函数 bin(),该函数输入是整数,输出是用二进制表示的字符串。如 bin(100) 就输出字符串 '0b1100100'。

>>> a = bin(100) # 得到十进制数100的二进制表示法

>>> a # 查看二进制表示法的值

'0b1100100'

>>> type(a) # 注意返回值是一个字符串

>>> b = bin(3) # 得到十进制数3的二进制表示法

>>> b

'0b11'

如果得到的是字符串,表示一个二进制数,如何将其转换成整数对象呢?可以使用函数 eval()。eval() 输入是字符串,返回值是一个整数对象。

>>> a = eval('0b1100100') # 输入是字符串

>>> type(a) # 返回值类型是整型

>>> a # 返回值的内容

100

还有一个可以使用的函数就是 int(),其实际上是整型的构造函数。该构造函数可以从字符串对象构造出整型对象,而且在构造时指定进制。和函数 eval() 不同,字符串不能以 0b 开头,并且要指定进制。

还是以 100 为例,输入是字符串 '1100100' 而不是 '0b 1100100'。并且带上进制参数 2,所以就可以用 int('1100100',2) 来构造值为二进制 1100100 的整数对象。

>>> a = int("1100100", 2) # 按照二进制的方式解析字符串"1100100",

>>> type(a) # 返回值的类型是整型

>>> a # 返回值的内容是100

100

int() 还可以指定第二个参数为 0,这时第一个参数就可以带上 0b。int() 看到第二个参数为 0,就会从第一个参数的 0b 上猜出应该按照二进制来解析输入的字符串。

>>> a = int("0b1101", 0) # 第二个参数为0,第一个参数带有0b,所以按照二进制解析

>>> type(a) # 返回值类型是整数

>>> a # 返回值的值为十进制的13

13

2. Python 八进制表示法

类似于二进制表示法,在数字之前加上 0 用来表示其为八进制数。

>>> a = 012 # 八进制数12,等同于10进制的10

>>> type(a)

>>> a # 查看a的值,默认是用十进制表示的

10

同样的问题,如何将一个整数转换成八进制的字符串?系统提供的函数是 oct(),其输入是整数对象,输出是一个字符串,该字符串也是以 0 开头。如数 oct(10) 就输出 '012'。

>>> out_str = oct(10) # 转换成字符串类型,按照八进制的格式转换

>>> type(out_str) # 返回值的类型是字符串

>>> out_str # 查看返回值的内容

'012'

>>> out_str = oct(100) # 对100进行八进制转换

>>> out_str # 查看转换结果

'0144'

如何从用八进制表示的字符串构造出整数对象呢?前面介绍的 eval() 和 int() 方法依然有效。使用 eval() 时需要输入字符串以 0 开头,这样 eval() 就知道输入的数是八进制表示的。

>>> a = eval('012') # 将字符串转换成整数,八进制格式表示的字符串

>>> type(a) # 查看返回值的类型

>>> a # 查看返回值的内容

10

>>> a = eval('0144') # 将八进制字符串144转换成整数

>>> a # 查看返回值的内容

100

使用 int() 来将字符串转换成整数,需要将第二个参数设定为 8,表示用八进制来解释该字符串,并且输入字符串不必以 0 开头。但是以 0 开头也不会有问题,因为 0 会被忽略掉,如 02 和 2 表示的意思是一样的。

>>> a = int('144', 8) # 八进制数144,没有以0开头

>>> type(a) # 输出的类型是整数

>>> a # 查看a的值,十进制表示为100

100

>>> a = int('0144', 8) # 0144等效于144

>>> a # 但是0b11不等效于11

100

>>> a = int('12', 8) # 八进制数12

>>> a

10

和二进制表示法一样,如果第二个参数为 0,并且第一个参数以 0 开头,那么 int() 将试图按照八进制来解析输入的第二个参数。例如:

>>> a = int("0144", 0) # 第二个参数为0,那么从第一个参数猜出进制

>>> type(a) # 由于第一参数以0开头,所以应该是八进制表示

# 返回值类型是整型

>>> a # 返回值是100,即八进制的144对应十进制的100

100

3. Python 十六进制表示法

十六进制表示法在数字前面加上 0x 或者 0X 来表示,除了用数字 0、1、…、9 这 10 个字符外,还引入了 a、b、c、d、e、f 这 6 个字符,分别表示 10、11、12、13、14 和 15。如十进制中的 15 用十六进制来表示就是 0xF 或者 0Xf。

需要注意的是,a、b、c、d、e、f 也可以用 A、B、C、D、E、F 来表示。

>>> a = 0xf # 0x开头表示是十六进制数

>>> a

15

>>> a = 0XF # 0X开头表示是十六进制数

>>> a

15

>>> a = 0Xf

>>> a

15

如果希望将整数转换成十六进制的字符串,可以使用函数 hex()。该函数输入是一个整型对象,输出是字符串。该输出字符串表示用十六进制表示该输入整数的格式。

>>> a = hex(9) # 转换成十六进制表示的字符串

>>> type(a) # 返回的是字符串

# 查看返回值的内容

>>> a

'0x9'

>>> b = hex(16) # 将十进制的16转换成十六进制表示的字符串

>>> b

'0x10' # 转换后的结果

如果希望做 hex() 的逆操作,可以使用 eval()。

>>> a = 100

>>> b = eval(hex(a)) # 先用hex()转换成十六进制表示的字符串

>>> type(b) # 然后用eval()将字符串转换成整型对象

# 返回值的类型是整型

>>> b # 经过两轮互逆的运算后还是得到最初的值100

100

如果输入的字符串不带开头的 0x 或者 0X,那么可以用 int() 来构造一个等值的整型对象。例如,还和前面一样,第二个参数为 16。

>>> a = int('64', 16) # 输入是十六进制表示的64

>>> type(a) # 返回值是一个整型对象

>>> a # 值为100,对应十六进制中的64

100

和前面的二进制、八进制一样,如果第二个参数为 0,第一个参数以 0x 开头,那么 int() 会将第二个参数当作十六进制来解释。例如:

>>> a = int("0x64", 0) # 第二个参数为0,所以从第一个参数猜出进制

>>> type(a) # 第一个参数开头是0x,所以按照十六进制解析

>>> a # 解析结果是十进制的100

100

另外,int() 函数不仅可以用于转换二进制数、八进制数和十六进制数,也可以用于转换任意进制的数。对于 16,其用 F 后面的 G 来表示,17 用 H 来表示,其他值的表示法以此类推。下面的例子演示了 17 进制数的使用。

>>> int('F', 17) # F表示15

15

>>> int('G', 17) # G表示16

16

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值