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

xminus 发布于 2018-02-07 binary 最后更新 2018-02-07 01:06 1133 浏览

你如何用Python文字表示整数作为二进制数字? 我很容易找到十六进制的答案:

>>> 0x12AF
4783
>>> 0x100
256
和八进制:
>>> 01267
695
>>> 0100
64
如何使用文字在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相同,但不再允许旧的027语法用于八进制。
已邀请:

mut

赞同来自:

据我可以告诉Python,通过2.5,只支持十六进制&八进制文字。我确实发现了一些有关将二进制文件添加到未来版本的讨论,但没有一个确定

yeum

赞同来自:

我很确定这是Python 3.0中可能用bin()去执行hex()和oct()的事情之一。 编辑: lbrandy的答案在所有情况下都是正确的。

ut_et

赞同来自:

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
其他方式。

aut_ea

赞同来自:

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

>>> 0b101111
47
您还可以使用新的 bin 函数来获取数字的二进制表示形式:
>>> bin(173)
'0b10101101'
文档的开发版本:What's New in Python 2.6

grem

赞同来自:

How do you express binary literals in Python?

它们不是“二元”文字,而是“整数文字”。您可以使用0,后跟Bb,后跟一系列零和1来表示二进制格式的整数文字,例如:
>>> 0b0010101010
170
>>> 0B010101
21
从Python 3 docs中,这些是在Python中提供整数文字的方法:
Integer literals are described by the following lexical definitions:
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"
There is no limit for the length of integer literals apart from what can be stored in available memory. Note that leading zeros in a non-zero decimal number are not allowed. This is for disambiguation with C-style octal literals, which Python used before version 3.0. Some examples of integer literals:
7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101
Changed in version 3.6: Underscores are now allowed for grouping purposes in literals.
其他表达二进制的方式: 你可以在一个可以被操作的字符串对象中包含零和字符串(尽管在大多数情况下你可能只需要在整数上进行按位运算) - 只需要传递int和零的字符串以及从中转换的基数(2 ):
>>> int('010101', 2)
21
您可以选择使用0b0B前缀:
>>> 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'

nin

赞同来自:

0在这里开始指定基地是8(不是10),这很容易看到:

>>> int('010101', 0)
4161
如果你不是从0开始,那么python会假定这个数字是10。
>>> int('10101', 0)
10101