An Embedded Engineer’s Blog

とある組み込みエンジニアの備忘録的なブログです。

Python学習メモ - その3

まえがき

最近、Python を勉強し始めたので、その学習メモです。

今回は基数についてです。

基数

基数は、各桁を構成する数値や記号の数を表し、簡単に言うと桁が繰り上がる数です。
この基数を使った数の表現方法を記数法と言います。


例えば、普段生活で使用するお金や数字の計算は 10 進数で、基数は 10(0〜9)がとなります。
また、時間の "分"は 60 進数で基数は 60(0〜59)ですし、"時"は 24 進数で基数は 24(0〜23)となります。

コンピュータの世界では、2 進数や 16 進数で数を表すと便利なことが多くあります。
また、最近ではあまり使われませんが 8 進数もあります。

2 進数、8 進数、16 進数

Python では、普通に整数値を記述した場合は 10 進数としてみなされます。
2 進数や 16 進数で表したい場合には、接頭語(プレフィックス)をつけます。

基数 接頭語 構成数値/記号 備考
10 進数 なし 0〜9
2 進数 0b 0〜1
8 進数 0o 0〜7
16 進数 0x 0〜9、A〜F


dec_num = 10
bin_num = 0b1010
oct_num = 0o12
hex_num = 0x0A

print(dec_num)
print(bin_num)
print(oct_num)
print(hex_num)

実行結果

10
10
10
10


2 進数や 16 進数で表現したとしても、内部的にはすべて整数型(int)で認識されます。
そのため、異なる基数で定義した数値同士の演算もそのまま行うことができます。

print(dec_num + bin_num + oct_num + hex_num)

実行結果

40


桁区切り

Python では、長い桁の数値を表す時に、見やすいように桁を区切る事ができます。
桁区切りは、区切りたい場所にアンダースコア"_"を挿入します。


2 進数は 4 桁ごと、16 進数は 2 桁ごと、10 進数は 3 桁ごとで区切られるのが一般的です。

bin_num1 = 0b10101010
bin_num2 = 0b1010_1010

hex_num1 = 0x1010
hex_num2 = 0x10_10

dec_num1 = 100000
dec_num2 = 100_000

print(bin_num1)
print(bin_num2)

print()

print(hex_num1)
print(hex_num2)

print()

print(dec_num1)
print(dec_num2)

実行結果

170
170

4112
4112

100000
100000


文字列変換

整数値を 2 進数、8 進数、16 進数の文字列に変換したい場合には、bin()、oct()、hex()関数を使用します。
文字列に変換した場合、プレフィックスは自動的に付加されます。

dec_num = 10

print(bin(dec_num))
print(oct(dec_num))
print(hex(dec_num))

実行結果

0b1010
0o12
0xa


数値変換

逆に、2 進数、8 進数、16 進数で表現された文字列を整数に変換する場合は、int()関数を使用します。

10 進数以外の文字列を数値に変換する場合には、第 2 引数に基数を指定する必要があります(第 2 引数を省略した場合は、10 進数値とみなして変換処理を行います)。

bin_str = "1010"
oct_str = "12"
hex_str = "0A"

print(int(bin_str, 2))
print(int(oct_str, 8))
print(int(hex_str, 16))

実行結果

10
10
10


ただし、変換したい文字列にプレフィックスがついていることが確実である場合、第 2 引数に 0 を指定することで、プレフィックスに応じた基数で整数への変換が行われます。

bin_str = "0b1010"
oct_str = "0o12"
hex_str = "0x0A"

print(int(bin_str, 0))
print(int(oct_str, 0))
print(int(hex_str, 0))

実行結果

10
10
10


参考文献

Python 公式リファレンス

https://docs.python.org/ja/3.7/index.html

Python-izm

https://www.python-izm.com/

ゲームを作りながら楽しく学べるPythonプログラミング

エキスパートPythonプログラミング

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)