1. ホーム
  2. python

[解決済み】2進数に変換して先頭のゼロを維持したい

2022-04-12 21:48:58

質問

Pythonのbin()関数を使って、整数を2進数に変換しようとしています。しかし、それは常に私が実際に必要とする先頭のゼロを削除し、結果が常に8ビットになるようにします。

bin(1) -> 0b1

# What I would like:
bin(1) -> 0b00000001

このような方法はあるのでしょうか?

どのように解決するのですか?

を使用します。 format() 機能 :

>>> format(14, '#010b')
'0b00001110'

format() の後に続く入力を単純にフォーマットします。 書式指定ミニ言語 . また # は、書式に 0b というプレフィックスがあり 010 は10文字幅に収まるように出力をフォーマットします。 0 は2文字、パディングは 0b がプレフィックス、残りの8個が2進数です。

これは最もコンパクトで直接的なオプションです。

結果をより大きな文字列で表現する場合は フォーマットされた文字列リテラル (3.6+)または str.format() の第2引数に format() 関数はプレースホルダのコロンの後に {:..} :

>>> value = 14
>>> f'The produced output, in binary, is: {value:#010b}'
'The produced output, in binary, is: 0b00001110'
>>> 'The produced output, in binary, is: {:#010b}'.format(value)
'The produced output, in binary, is: 0b00001110'

たまたま、単一の値をフォーマットする場合でさえ、フォーマットされた文字列リテラルを使用する方が format() :

>>> import timeit
>>> timeit.timeit("f_(v, '#010b')", "v = 14; f_ = format")  # use a local for performance
0.40298633499332936
>>> timeit.timeit("f'{v:#010b}'", "v = 14")
0.2850222919951193

しかし、これはタイトなループでのパフォーマンスが重要な場合にのみ使用します。 format(...) の方が意図が伝わります。

が必要ない場合は 0b プレフィックスを削除します。 # で、フィールドの長さを調整します。

>>> format(14, '08b')
'00001110'