Pythonでバイナリリテラルをどのように表現しますか?
これらは「バイナリ」リテラルではなく、「整数リテラル」です。整数リテラルは、一連のゼロと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"
使用可能なメモリに格納できるものを除いて、整数リテラルの長さに制限はありません。
0以外の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の文字列、および変換元の(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'