如何用Python文字将整数表示为二进制数?
我很容易找到十六进制的答案:
1 2 3 4
| >>> 0x12AF
4783
>>> 0x100
256 |
和八进制:
1 2 3 4
| >>> 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相同,但不再允许octals的旧027语法。
对于参考未来Python的可能性:
从Python 2.6开始,您可以使用前缀0b或0B表示二进制文字:
您还可以使用新的bin函数来获取数字的二进制表示:
1 2
| >>> bin(173)
'0b10101101' |
文档的开发版本:Python 2.6中的新功能
1 2 3 4
| >>> print int('01010101111',2)
687
>>> print int('11111111',2)
255 |
其他方式。
How do you express binary literals in Python?
它们不是"二元"文字,而是"整数文字"。您可以使用二进制格式表示整数文字,其中0后跟一个B或B,后跟一系列零和一,例如:
1 2 3 4
| >>> 0b0010101010
170
>>> 0B010101
21 |
从Python 3文档中,这些是在Python中提供整数文字的方法:
Integer literals are described by the following lexical definitions:
1 2 3 4 5 6 7 8 9 10
| 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:
1 2 3
| 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.
表达二进制的其他方式:
你可以在一个可以操作的字符串对象中使用0和1(尽管在大多数情况下你可能只对整数进行按位操作) - 只需传入0和0的字符串以及要转换的基数(2) ):
1 2
| >>> int('010101', 2)
21 |
您可以选择使用0b或0b前缀:
1 2
| >>> int('0b0010101010', 2)
170 |
如果以0为基数传递它,如果字符串未指定前缀,它将假定为10:
1 2 3 4
| >>> int('10101', 0)
10101
>>> int('0b10101', 0)
21 |
从int转换回人类可读二进制文件:
您可以将整数传递给bin以查看二进制文字的字符串表示形式:
你可以组合bin和int来回走动:
1 2
| >>> bin(int('010101', 2))
'0b10101' |
如果要使用前面的零的最小宽度,也可以使用格式规范:
1 2 3 4
| >>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101' |
这里的开头0指定基数是8(而不是10),这很容易看出:
1 2
| >>> int('010101', 0)
4161 |
如果你不以0开头,那么python假设数字是10。
1 2
| >>> int('10101', 0)
10101 |
我很确定这是由于Python 3.0中的变化而导致的事情之一,或许bin()与hex()和oct()一起使用。
编辑:
lbrandy的答案在所有情况下都是正确的。
据我所知,Python直到2.5,只支持十六进制和八进制文字。我确实找到了一些关于在未来版本中添加二进制文件的讨论,