如何使用Python文字将整数表示为二进制数?
我很容易找到十六进制的答案:
>>> 0x12AF
4783
>>> 0x100
256
和八进制:
>>> 01267
695
>>> 0100
64
如何使用文字在Python中表达二进制文件?
答案摘要
int('01010101111',2)
表示二进制文件,但不能使用文字表达。0b1100111
或0B1100111
。0o27
或0O27
(第二个字符是字母O)来表示八进制。027
语法。答案 0 :(得分:265)
供参考 - 未来 Python的可能性:
从Python 2.6开始,您可以使用前缀 0b 或 0B 来表达二进制文字:
>>> 0b101111
47
您还可以使用新的 bin 函数来获取数字的二进制表示形式:
>>> bin(173)
'0b10101101'
文档的开发版本:What's New in Python 2.6
答案 1 :(得分:70)
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
另一种方式。
答案 2 :(得分:18)
如何在Python中表达二进制文字?
它们不是“二元”文字,而是“整数文字”。您可以使用二进制格式表示整数文字,其中0
后跟B
或b
,后跟一系列零和1,例如:
>>> 0b0010101010
170
>>> 0B010101
21
从Python 3 docs,这些是在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"
除了什么之外,整数文字的长度没有限制 可存储在可用内存中。
请注意,不允许使用非零十进制数的前导零。 这是为了消除C语言的八进制文字,这是Python 在3.0版之前使用。
整数文字的一些例子:
7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101
在版本3.6中更改:现在允许下划线用于文字分组。
你可以在一个可以操作的字符串对象中使用0和1(尽管在大多数情况下你应该只对整数进行按位操作) - 只需传入0和0的字符串以及你要转换的基数来自(2):
>>> int('010101', 2)
21
您可以选择使用0b
或0B
前缀:
>>> int('0b0010101010', 2)
170
如果您将0
作为基础传递,如果字符串未指定前缀,它将假定为10:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
您可以将整数传递给bin以查看二进制文字的字符串表示形式:
>>> bin(21)
'0b10101'
您可以将bin
和int
结合起来来回:
>>> bin(int('010101', 2))
'0b10101'
如果您希望最小宽度带有前面的零,也可以使用格式规范:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
答案 3 :(得分:1)
0指定基数是8(而不是10),这很容易看出:
>>> int('010101', 0)
4161
如果你不以0开头,那么python假设数字是10的基数。
>>> int('10101', 0)
10101
答案 4 :(得分:0)
从二进制文件获取整数表示的另一个好方法是使用eval()
像这样:
def getInt(binNum = 0):
return eval(eval('0b' + str(n)))
我想这也是一种方法。 我希望这是一个令人满意的答案:D
答案 5 :(得分:0)
我已经在Python 3.6.9中进行了尝试
将二进制转换为十进制
>>> 0b101111
47
>>> int('101111',2)
47
将十进制转换为二进制
>>> bin(47)
'0b101111'
将0设置为python假定第二个参数为小数。
>>> int('101111',0)
101111
答案 6 :(得分:-1)
据我所知,Python直到2.5,只支持十六进制和&八进制文字。我确实找到了一些关于将二进制文件添加到未来版本的讨论,但没有一点明确。
答案 7 :(得分:-1)
我很确定这是由于Python 3.0中的变化而导致的事情之一,或许bin()与hex()和oct()一起使用。
编辑: lbrandy的答案在所有情况下都是正确的。