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

发布于 2024-07-04 15:10:21 字数 693 浏览 6 评论 0原文

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

我很容易找到十六进制:

>>> 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 八进制语法。

How do you express an integer as a binary number with Python literals?

I was easily able to find the answer for hex:

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

and octal:

>>> 01267
695
>>> 0100
64

How do you use literals to express binary in Python?


Summary of Answers

  • Python 2.5 and earlier: can express binary using int('01010101111',2) but not with a literal.
  • Python 2.5 and earlier: there is no way to express binary literals.
  • Python 2.6 beta: You can do like so: 0b1100111 or 0B1100111.
  • Python 2.6 beta: will also allow 0o27 or 0O27 (second character is the letter O) to represent an octal.
  • Python 3.0 beta: Same as 2.6, but will no longer allow the older 027 syntax for octals.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

俏︾媚 2024-07-11 15:10:22

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

像这样:

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

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

Another good method to get an integer representation from binary is to use eval()

Like so:

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

I guess this is a way to do it too.
I hope this is a satisfactory answer :D

撩动你心 2024-07-11 15:10:22

我在Python 3.6.9中尝试过这个

将二进制转换为十进制

>>> 0b101111
47

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

将十进制转换为二进制

>>> bin(47)
'0b101111'

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

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

I've tried this in Python 3.6.9

Convert Binary to Decimal

>>> 0b101111
47

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

Convert Decimal to binary

>>> bin(47)
'0b101111'

Place a 0 as the second parameter python assumes it as decimal.

>>> int('101111',0)
101111
何以心动 2024-07-11 15:10:22

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

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

如果不以 0 开头,那么 python 会假设该数字是基数 10。

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

0 in the start here specifies that the base is 8 (not 10), which is pretty easy to see:

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

If you don't start with a 0, then python assumes the number is base 10.

>>> int('10101', 0)
10101
佞臣 2024-07-11 15:10:22

据我所知,Python 从 2.5 版本开始,仅支持十六进制和十六进制。 八进制文字。 我确实找到了一些关于在未来版本中添加二进制文件的讨论,但没有明确的内容。

As far as I can tell Python, up through 2.5, only supports hexadecimal & octal literals. I did find some discussions about adding binary to future versions but nothing definite.

如此安好 2024-07-11 15:10:22

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

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

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

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

整数文字由以下词法定义描述:

整数 ::= 十进制 |   二进制整数 |   八进制 |   十六进制整数 
  十整数 ::= 非零数字 (["_"] 数字)* |   “0”+([“_”]“0”)* 
  bininteger ::= "0" ("b" | "B") (["_"] bindigit)+ 
  八进制 ::= "0" ("o" | "O") (["_"] 八进制数字)+ 
  十六进制整数 ::= "0" ("x" | "X") (["_"] 十六进制数字)+ 
  非零数字 ::= "1"..."9" 
  数字 ::= "0"..."9" 
  bindigit ::= "0" | 二进制数字  “1” 
  八位数字 ::= "0"..."7" 
  十六进制数字 ::= 数字 |   “a”...“f”|   “A”...“F” 
  

除了以下内容之外,整数文字的长度没有限制
可以存储在可用内存中。

请注意,非零十进制数中不允许有前导零。
这是为了消除 C 风格八进制文字的歧义,Python
3.0版本之前使用。

整数文字的一些示例:

<前><代码>7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0x死牛肉
100_000_000_000 0b_1110_0101

版本 3.6 中的更改:现在允许在文字中使用下划线进行分组。

表达二进制的其他方式:

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

并且您可以组合 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'

How do you express binary literals in Python?

They're not "binary" literals, but rather, "integer literals". You can express integer literals with a binary format with a 0 followed by a B or b followed by a series of zeros and ones, for example:

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

From the Python 3 docs, these are the ways of providing integer literals in Python:

Integer literals are described by the following lexical definitions:

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:

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.

Other ways of expressing binary:

You can have the zeros and ones in a string object which can be manipulated (although you should probably just do bitwise operations on the integer in most cases) - just pass int the string of zeros and ones and the base you are converting from (2):

>>> int('010101', 2)
21

You can optionally have the 0b or 0B prefix:

>>> int('0b0010101010', 2)
170

If you pass it 0 as the base, it will assume base 10 if the string doesn't specify with a prefix:

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

Converting from int back to human readable binary:

You can pass an integer to bin to see the string representation of a binary literal:

>>> bin(21)
'0b10101'

And you can combine bin and int to go back and forth:

>>> bin(int('010101', 2))
'0b10101'

You can use a format specification as well, if you want to have minimum width with preceding zeros:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
别理我 2024-07-11 15:10:22
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

其他方式。

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

Another way.

嘴硬脾气大 2024-07-11 15:10:22

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

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

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

For reference—future Python possibilities:
Starting with Python 2.6 you can express binary literals using the prefix 0b or 0B:

>>> 0b101111
47

You can also use the new bin function to get the binary representation of a number:

>>> bin(173)
'0b10101101'

Development version of the documentation: What's New in Python 2.6

海夕 2024-07-11 15:10:22

我很确定这是由于 Python 3.0 中的更改而导致的问题之一,也许 bin() 与 hex() 和 oct() 配合使用。

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

I am pretty sure this is one of the things due to change in Python 3.0 with perhaps bin() to go with hex() and oct().

EDIT:
lbrandy's answer is correct in all cases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文