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

Jus*_*ard 336 python syntax binary integer literals

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

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

>>> 0x12AF
4783
>>> 0x100
256
Run Code Online (Sandbox Code Playgroud)

和八进制:

>>> 01267
695
>>> 0100
64
Run Code Online (Sandbox Code Playgroud)

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


答案摘要

  • Python 2.5及更早版本:可以使用int('01010101111',2)文字来表示二进制文件,但不能用文字表达.
  • Python 2.5及更早版本:没有办法表达二进制文字.
  • Python 2.6 beta:您可以这样做:0b11001110B1100111.
  • Python 2.6 beta:也允许0o270O27(第二个字符是字母O)表示八进制.
  • Python 3.0 beta:与2.6相同,但不再允许027octals 的旧语法.

And*_*mas 278

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

>>> 0b101111
47
Run Code Online (Sandbox Code Playgroud)

您还可以使用新的bin函数来获取数字的二进制表示:

>>> bin(173)
'0b10101101'
Run Code Online (Sandbox Code Playgroud)

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


Lou*_*ndy 71

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Run Code Online (Sandbox Code Playgroud)

其他方式.

  • 当你有字符串时,这很有趣,但如果使用纯数字,你可以为代码添加不必要的计算. (2认同)

Aar*_*all 23

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

它们不是"二元"文字,而是"整数文字".您可以使用二进制格式表示整数文字,0后跟一个Bb后跟一系列零和一,例如:

>>> 0b0010101010
170
>>> 0B010101
21
Run Code Online (Sandbox Code Playgroud)

从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"
Run Code Online (Sandbox Code Playgroud)

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

请注意,不允许使用非零十进制数的前导零.这是为了消除C语言八进制文字,这是Python在3.0版之前使用的.

整数文字的一些例子:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101
Run Code Online (Sandbox Code Playgroud)

在版本3.6中更改:现在允许下划线用于文字分组.

表达二进制的其他方式:

你可以在一个可以操作的字符串对象中使用0和1(尽管在大多数情况下你可能只对整数进行按位操作) - 只需传入0和0的字符串以及要转换的基数(2) ):

>>> int('010101', 2)
21
Run Code Online (Sandbox Code Playgroud)

您可以选择使用0b0B前缀:

>>> int('0b0010101010', 2)
170
Run Code Online (Sandbox Code Playgroud)

如果您将其0作为基础传递,如果字符串未指定前缀,则它将假定为10:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Run Code Online (Sandbox Code Playgroud)

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

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

>>> bin(21)
'0b10101'
Run Code Online (Sandbox Code Playgroud)

你可以结合binint去来回:

>>> bin(int('010101', 2))
'0b10101'
Run Code Online (Sandbox Code Playgroud)

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

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