如何使`bin(30)`返回`00011110`而不是`0b11110`?

50 投票
7 回答
84499 浏览
提问于 2025-04-15 14:09

在使用 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'
>>>

撰写回答