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

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

我很容易就找到了hex的答案:

>>> 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语法。
309343 次浏览

据我所知,Python在2.5之前只支持十六进制&八进制文字。我确实发现了一些关于在未来版本中添加二进制的讨论,但没有明确的内容。

我很确定这是Python 3.0中bin()与hex()和oct()一起改变的事情之一。

< p >编辑: Lbrandy的答案在所有情况下都是正确的。

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

另一种方式。

未来 Python的可能性:
从Python 2.6开始,可以使用前缀0 b0 b表示二进制字面值:

>>> 0b101111
47

你也可以使用新的箱子函数来获取一个数字的二进制表示形式:

>>> bin(173)
'0b10101101'

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

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

它们不是“二进制”字面量,而是“整数字面量”。你可以用二进制格式表示整数字面量,即0后跟Bb后跟一系列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"

整数字面量的长度没有限制,除了what

注意,在一个非零的十进制数中前导零是不允许的。 这是为了用c风格的八进制文字消除歧义,Python

整数字面量的一些例子:

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

在3.6版更改:下划线现在被允许用于字面量的分组目的。

表示二进制的其他方法:

你可以把0和1放在一个可以被操纵的字符串对象中(尽管在大多数情况下你应该只对整数进行位操作)-只需将0和1组成的字符串和你要从(2)转换的基数传递给int:

>>> 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'

你也可以使用格式规范,如果你想有最小宽度前面的0:

>>> 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

另一个从二进制中获得整数表示的好方法是使用eval()

像这样:

def getInt(binNum = 0):
return eval(eval('0b' + str(n)))
我想这也是一种方法。 我希望这是一个令人满意的答案:D

我在Python 3.6.9中尝试过

将二进制转换为十进制

>>> 0b101111
47


>>> int('101111',2)
47

将十进制转换为二进制

>>> bin(47)
'0b101111'

将0作为第二个参数,python假定它是小数。

>>> int('101111',0)
101111