如何用Python文字将整数表示为二进制数?
我很容易就找到了hex的答案:
>>> 0x12AF 4783 >>> 0x100 256
和八进制:
>>> 01267 695 >>> 0100 64
在Python中如何使用文字来表示二进制?
答案摘要 .
int('01010101111',2)
0b1100111
0B1100111
0o27
0O27
027
据我所知,Python在2.5之前只支持十六进制&八进制文字。我确实发现了一些关于在未来版本中添加二进制的讨论,但没有明确的内容。
我很确定这是Python 3.0中bin()与hex()和oct()一起改变的事情之一。
>>> print int('01010101111',2) 687 >>> print int('11111111',2) 255
另一种方式。
>>> 0b101111 47
你也可以使用新的箱子函数来获取一个数字的二进制表示形式:
>>> bin(173) '0b10101101'
文档的开发版本:Python 2.6新增功能
如何在Python中表达二进制文字?
它们不是“二进制”字面量,而是“整数字面量”。你可以用二进制格式表示整数字面量,即0后跟B或b后跟一系列0和1,例如:
0
B
b
>>> 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版更改:下划线现在被允许用于字面量的分组目的。
整数字面量由以下词法定义描述:
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
你可以选择使用0b或0B前缀:
0b
0B
>>> int('0b0010101010', 2) 170
如果传入0作为底,如果字符串没有指定前缀,它将假设以10为底:
>>> int('10101', 0) 10101 >>> int('0b10101', 0) 21
你可以将一个整数传递给bin来查看二进制字面值的字符串表示形式:
>>> bin(21) '0b10101'
你可以组合bin和int来来回执行:
bin
int
>>> 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)))
我在Python 3.6.9中尝试过
将二进制转换为十进制
>>> 0b101111 47 >>> int('101111',2) 47
将十进制转换为二进制
>>> bin(47) '0b101111'
将0作为第二个参数,python假定它是小数。
>>> int('101111',0) 101111