384

Python リテラルで整数を 2 進数として表現するにはどうすればよいですか?

16進数の答えを簡単に見つけることができました:

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

および8進数:

>>> 01267
695
>>> 0100
64

Pythonでバイナリを表現するためにリテラルをどのように使用しますか?


回答のまとめ

  • Python 2.5 以前: リテラルを使用してバイナリを表現できますint('01010101111',2)が、リテラルでは表現できません。
  • Python 2.5 以前:バイナリ リテラルを表現する方法がありません。
  • Python 2.6 ベータ版: 次のようにできます:0b1100111または0B1100111.
  • Python 2.6 beta:0o27または0O27(2 番目の文字は文字 O) で 8 進数を表すこともできます。
  • 027Python 3.0 ベータ版: 2.6 と同じですが、8 進数の古い構文は使用できなくなります。
4

8 に答える 8

329

参考までに—将来のPythonの可能性:
Python 2.6以降では、プレフィックス0bまたは0Bを使用してバイナリリテラルを表現できます。

>>> 0b101111
47

新しいbin関数を使用して、数値の2進表現を取得することもできます。

>>> bin(173)
'0b10101101'

ドキュメントの開発バージョン:Python2.6の新機能

于 2008-08-16T12:35:36.170 に答える
79
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

別の方法。

于 2008-08-04T18:34:45.520 に答える
38

Pythonでバイナリリテラルをどのように表現しますか?

それらは「バイナリ」リテラルではなく、「整数リテラル」です。0整数リテラルは、a の後に aBまたはb一連の 0 と 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"

使用可能なメモリに格納できるものを除けば、整数リテラルの長さには制限がありません。

ゼロ以外の 10 進数の先行ゼロは許可されないことに注意してください。これは、Python がバージョン 3.0 より前に使用していた C スタイルの 8 進数リテラルとのあいまいさを解消するためのものです。

整数リテラルの例:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

バージョン 3.6 で変更:リテラル内でグループ化の目的でアンダースコアを使用できるようになりました。

バイナリを表現する他の方法:

操作可能な文字列オブジェクトに 0 と 1 を含めることができます (ただし、ほとんどの場合、整数に対してビット単位の操作を行う必要があります) - 0 と 1 の文字列と変換元の基数を int に渡すだけです (2 ):

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

オプションで、0bまたは0B接頭辞を付けることができます。

>>> 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'
于 2016-05-14T11:58:03.253 に答える
-2

私が知る限り、Python は 2.5 まで、16 進数と 8 進数のリテラルのみをサポートしています。将来のバージョンにバイナリを追加することについての議論をいくつか見つけましたが、明確なものはありません。

于 2008-08-04T18:26:13.777 に答える
-3

これは、Python 3.0 でおそらく bin() が hex() および oct() に合わせて変更されたための 1 つだと確信しています。

編集: lbrandy の答えはすべての場合で正しいです。

于 2008-08-04T18:27:26.627 に答える