如何使`bin(30)`返回`00011110`而不是`0b11110`?
在使用 bin(30)
这个命令时,输出结果是 0b11110
。这里的 b
是什么意思呢?它表示这个数字是以二进制(也就是计算机使用的数字系统)形式显示的。想要去掉这个 b
吗?其实是可以的。你可以用其他方法来处理这个输出。
另外,如果你想让 bin()
的输出总是显示成标准的8位数字格式,这也是可以做到的。你可以通过一些额外的代码来实现这个效果。
7 个回答
20
利用著名的 format()
函数的第二个参数,虽然这个参数不太为人所知,然后再和 zfill()
函数结合使用。
'b'
- 二进制
'x'
- 十六进制
'o'
- 八进制
'd'
- 十进制
>>> print format(30, 'b')
11110
>>> print format(30, 'b').zfill(8)
00011110
这样做应该没问题。在这里,'b'
代表二进制,和 'x'
、'o'
、'd'
分别代表十六进制、八进制和十进制一样。
34
0b就像0x一样,它表示这个数字是用二进制格式表示的(而0x表示的是十六进制)。
可以查看 如何在Python中表示二进制字面量?
也可以查看 http://docs.python.org/dev/whatsnew/2.6.html#pep-3127-integer-literal-support-and-syntax
如果想去掉前面的0b,最简单的方法是用字符串切片:bin(30)[2:]
同样,如果想格式化成8个字符宽:
('00000000'+bin(30)[2:])[-8:]
另外,你也可以使用 字符串格式化工具(在2.6及以上版本)一步完成:
"{0:08b}".format(30)
75
使用 zfill() 方法:
这个方法会返回一个数字字符串,左边用零填充到指定的长度。如果字符串前面有符号(比如正负号),这个方法也会处理得很好。如果你指定的长度小于原字符串的长度,它就会直接返回原字符串。
>>> bin(30)[2:].zfill(8)
'00011110'
>>>