如何使用 Python 文字将整数表示为二进制数?

我很容易找到十六进制的答案:

>>> 0x12AF
4783
>>> 0x100
256

和八进制:

>>> 01267
695
>>> 0100
64

在 Python 中如何使用文字来表达二进制?


答案摘要

  • Python 2.5 及更早版本:可以使用二进制表示 int('01010101111',2) 但不是字面意思。
  • Python 2.5 及更早版本:有 决不 来表达二进制文字。
  • Python 2.6 测试版:你可以这样做: 0b1100111 或者 0B1100111.
  • Python 2.6 测试版:也将允许 0o27 或者 0O27 (第二个字符是字母 O)代表八进制。
  • Python 3.0 测试版:与 2.6 相同,但不再允许旧版本 027 八进制的语法。
有帮助吗?

解决方案

以供参考-未来 Python 的可能性:
从 Python 2.6 开始,您可以使用前缀表示二进制文字 0b 或者 0B:

>>> 0b101111
47

您还可以使用新的 垃圾桶 获取数字的二进制表示的函数:

>>> bin(173)
'0b10101101'

开发版本文档: Python 2.6 的新增功能

其他提示

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

其他方式。

如何在 Python 中表达二进制文字?

它们不是“二进制”文字,而是“整数文字”。您可以使用二进制格式来表达整数文字 0 随后是一个 B 或者 b 后面跟着一系列的 0 和 1,例如:

>>> 0b0010101010
170
>>> 0B010101
21

来自Python 3 文档, ,这些是在 Python 中提供整数文字的方法:

整数字量由以下词法定义描述:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

除了可以存储在可用内存中的内容之外,整数文字的长度没有限制。

请注意,非零十进制数中不允许有前导零。这是用C风格的八进制文字的歧义,Python在版本3.0之前使用。

整数文字的一些示例:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

3.6版本更改: 现在允许在文字中使用下划线进行分组。

二进制的其他表达方式:

您可以在可操作的字符串对象中拥有零和一(尽管在大多数情况下您可能应该只对整数进行按位运算) - 只需传递 int 零和一的字符串以及要转换的基数(2 ):

>>> int('010101', 2)
21

您可以选择拥有 0b 或者 0B 字首:

>>> int('0b0010101010', 2)
170

如果你通过了 0 作为基数,如果字符串未指定前缀,则假定基数为 10:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

从 int 转换回人类可读的二进制:

您可以将整数传递给 bin 以查看二进制文字的字符串表示形式:

>>> bin(21)
'0b10101'

并且你可以结合 binint 来回:

>>> bin(int('010101', 2))
'0b10101'

如果您想要前面带零的最小宽度,您也可以使用格式规范:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

这里开头的 0 指定基数是 8(而不是 10),这很容易看出:

>>> int('010101', 0)
4161

如果不是以 0 开头,那么 python 会假定该数字以 10 为基数。

>>> int('10101', 0)
10101

据我所知,Python 从 2.5 版本开始,仅支持十六进制和八进制文字。我确实找到了一些关于在未来版本中添加二进制文件的讨论,但没有明确的内容。

我很确定这是由于 Python 3.0 中的更改而导致的问题之一,也许 bin() 与 hex() 和 oct() 配合使用。

编辑:布兰迪的答案在所有情况下都是正确的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top