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
ゲームを作りながら楽しく学べるPythonプログラミング
ゲームを作りながら楽しく学べるPythonプログラミング (Future Coders(NextPublishing))
- 作者: 田中賢一郎
- 出版社/メーカー: インプレスR&D
- 発売日: 2017/03/24
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
エキスパートPythonプログラミング
エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)
- 作者: Michal Jaworski,TarekZiade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: ドワンゴ
- 発売日: 2018/02/26
- メディア: Kindle版
- この商品を含むブログを見る