ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

和八进制:

>>> 01267
695
>>> 0100
64

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

答案摘要

Python 2.5 及更早版本:可以使用 int('01010101111',2) 表示二进制,但不能使用文字。

Python 2.5 及更早版本:无法表达二进制文字。

Python 2.6 beta:你可以这样做:0b1100111 或 0B1100111。

Python 2.6 beta:还将允许 0o27 或 0O27(第二个字符是字母 O)表示八进制。

Python 3.0 beta:与 2.6 相同,但不再允许使用旧的 027 八进制语法。


A
Andreas Thomas

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

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

文档的开发版本:What's New in Python 2.6


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

另一种方式。


当您有字符串时,这很有趣,但是如果使用纯数字,您会在代码中添加不必要的计算。
R
Russia Must Remove Putin

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

它们不是“二进制”文字,而是“整数文字”。您可以使用 0 后跟 Bb 后跟一系列 0 和 1 的二进制格式来表示整数文字,例如:

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

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

整数字面量由以下词法定义描述: integer ::= decinteger |整数 |八进制 | hexinteger decinteger ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")* bininteger ::= "0" ("b" | "B") (["_"] bindigit)+ octinteger ::= "0" ("o " | "O") (["_"] octdigit)+ hexinteger ::= "0" ("x" | "X") (["_"] hexdigit)+ nonzerodigit ::= "1"... "9" 数字 ::= "0"..."9" bindigit ::= "0" | "1" 八进制数 ::= "0"..."7" 十六进制数 ::= 数字 | "a"..."f" | "A"..."F" 除了可以存储在可用内存中的长度之外,整数文字的长度没有限制。请注意,不允许在非零十进制数中使用前导零。这是为了消除 Python 在 3.0 版之前使用的 C 风格的八进制文字的歧义。整数文字的一些示例: 7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101 在版本 3.6 中更改:现在允许在文字中使用下划线进行分组

其他表示二进制的方式:

您可以在可以操作的字符串对象中包含零和一(尽管在大多数情况下您可能应该只对整数进行按位运算) - 只需将零和一的字符串以及要从 (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'

int(hex(1234), 16) = 1234:D
R
Ranjeet R Patil

我在 Python 3.6.9 中试过这个

将二进制转换为十进制

>>> 0b101111
47

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

将十进制转换为二进制

>>> bin(47)
'0b101111'

将 0 作为第二个参数 python 假定它为十进制。

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

M
Mehmet Ugurbil

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

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

如果您不以 0 开头,则 python 假定该数字以 10 为底。

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

N
Novus Edge

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

像这样:

def getInt(binNum = 0):
    return eval(eval('0b' + str(n)))

我想这也是一种方法。我希望这是一个令人满意的答案:D


M
Mark Biek

据我所知,Python 直到 2.5,只支持十六进制和八进制文字。我确实找到了一些关于将二进制文件添加到未来版本的讨论,但没有确定的。


P
Peter Mortensen

我很确定这是由于 Python 3.0 中的变化之一,可能 bin() 与 hex() 和 oct() 一起使用。

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