Python の組み込み関数 bin の使い方です。
bin 関数で、整数を『2 進数 (binary)』で表現するコード例と、実行結果を載せました。
bin 関数は、整数を 2 進数の文字列に変換してくれました。
(例)bin(2) -> '0b10'
あと、『エラーになったコード例』も書きました。
エラーになったコード例
bin 関数で、エラーになったコード例です。
bin 関数に整数でないものを渡したら、『整数として解釈できませんでした』という旨のエラーメッセージが出ました。
bin('') # '' 空文字列
TypeError: 'str' object cannot be interpreted as an integer
bin('5') # '5'
TypeError: 'str' object cannot be interpreted as an integer
bin('a') # 'a'
TypeError: 'str' object cannot be interpreted as an integer
bin(1.2) # 1.2
TypeError: 'float' object cannot be interpreted as an integer
bin(complex(3, 4)) # (3+4j)
TypeError: 'complex' object cannot be interpreted as an integer
bin(None) # None
TypeError: 'NoneType' object cannot be interpreted as an integer
bin(()) # ()
TypeError: 'tuple' object cannot be interpreted as an integer
bin([]) # []
TypeError: 'list' object cannot be interpreted as an integer
bin(set()) # set()
TypeError: 'set' object cannot be interpreted as an integer
bin({}) # {}
TypeError: 'dict' object cannot be interpreted as an integer
bin(range(0, 1)) # range(0, 1)
TypeError: 'range' object cannot be interpreted as an integer
bin(lambda x: x) # <function <lambda> at 0x0000000000000000>
TypeError: 'function' object cannot be interpreted as an integer
bin(bytes([5])) # b'\x05'
TypeError: 'bytes' object cannot be interpreted as an integer
bin(bytearray([5])) # bytearray(b'\x05')
TypeError: 'bytearray' object cannot be interpreted as an integer
from decimal import Decimal
bin(Decimal(1)) # Decimal('1')
TypeError: 'decimal.Decimal' object cannot be interpreted as an integer
import datetime
bin(datetime.datetime.max) # datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
TypeError: 'datetime.datetime' object cannot be interpreted as an integer
import datetime
bin(datetime.timedelta.max) # datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
TypeError: 'datetime.timedelta' object cannot be interpreted as an integer
bool を渡した結果
bin 関数に、bool(真理値)を渡した結果です。
bin(False) # False
'0b0'
bin(True) # True
'0b1'
int を渡した結果
bin 関数に、int(整数)を渡した結果です。
bin(3) # 3
'0b11'
bin(2) # 2
'0b10'
bin(1) # 1
'0b1'
bin(0) # 0
'0b0'
bin(-1) # -1
'-0b1'
bin(-2) # -2
'-0b10'
bin(-3) # -3
'-0b11'
ほかの方法
bin 関数の代わりに、
- format 関数
str.format
メソッドf''
を使用して、2 進数の文字列に変換することもできました。
接頭辞についてです。
2 進数の先頭に '0b'
を付けることもできましたし、逆に、'0b'
を付けずに、2 進数の部分だけを取得することもできました。
2 -> '0b10'
2 進数の先頭に、接頭辞の '0b'
を付けて変換するコード例です。
format 関数の実行結果です。
(Python) format(value[, format_spec])
format(2, '#b')
'0b10'
format(0, '#b')
'0b0'
format(-2, '#b')
'-0b10'
str.format
メソッドの実行結果です。
(Python) str.format(*args, **kwargs)
'{n:#b}'.format(n=2)
'0b10'
'{n:#b}'.format(n=0)
'0b0'
'{n:#b}'.format(n=-2)
'-0b10'
f''
の実行結果です。
(Python) フォーマット済み文字列リテラル (f-string, f''
)
f'{2:#b}'
'0b10'
f'{0:#b}'
'0b0'
f'{-2:#b}'
'-0b10'
2 -> '10' 接頭辞 '0b' 無し
2 進数の先頭に、接頭辞の '0b'
を付けないようにして変換するコード例です。
『2 進数の部分だけ』の文字列を取得することができました。
当然のことながら、結果だけを見たら、もはや何進数の数なのか、わからなくなっていました。
format 関数の実行結果です。
(Python) format(value[, format_spec])
format(2, 'b')
'10'
format(0, 'b')
'0'
format(-2, 'b')
'-10'
str.format
メソッドの実行結果です。
(Python) str.format(*args, **kwargs)
'{n:b}'.format(n=2)
'10'
'{n:b}'.format(n=0)
'0'
'{n:b}'.format(n=-2)
'-10'
f''
の実行結果です。
(Python) フォーマット済み文字列リテラル (f-string, f''
)
f'{2:b}'
'10'
f'{0:b}'
'0'
f'{-2:b}'
'-10'
ところで、printf 形式の %
演算子で、2 進数の文字列表現を取得する方法は、無いようでした。
(Python) printf 形式の文字列書式化(%
演算子)に載っていた、『変換フラグ文字』と『変換型』の表を見ました。
ですが、%
演算子で 2 進数に変換する方法は、見つかりませんでした。
以上です。