Pythonのプログラム内で数値を扱う際、通常は10進数(0〜9)を使用しますが、用途によっては2進数、8進数、16進数で記述した方が直感的な場合があります。
例えば、ビット演算を行う場合は2進数が、ファイルパーミッションの設定には8進数が、色情報の指定やバイナリデータの処理には16進数が適しています。
Pythonでは、数値の先頭に特定の**プレフィックス(接頭辞)**を付けることで、これらのN進数を直接記述できます。
この記事では、各進数の表記方法と、Pythonでの扱いについて解説します。
目次
N進数表記のプレフィックス一覧
Pythonで利用できる主な整数リテラルの表記は以下の通りです。大文字・小文字は区別されませんが、読みやすさのために小文字(0xなど)が使われることが一般的です。
| プレフィックス | 進数 | 意味 | 使用できる文字 |
0b または 0B | 2進数 (Binary) | 2を基数とする数値 | 0, 1 |
0o または 0O | 8進数 (Octal) | 8を基数とする数値 | 0 ~ 7 |
0x または 0X | 16進数 (Hexadecimal) | 16を基数とする数値 | 0 ~ 9, a ~ f (A~F) |
各進数の使用例
これらの表記法を使って変数に代入すると、Python内部では通常の「整数(int)」として扱われます。そのため、print() 関数などで出力すると、デフォルトでは10進数に変換されて表示されます。
1. 2進数 (0b)
ビットフラグの管理などでよく使用されます。
# 2進数で定義 (10進数の 10)
binary_val = 0b1010
print(f"値: {binary_val}")
print(f"型: {type(binary_val)}")
実行結果:
値: 10
型: <class 'int'>
2. 8進数 (0o)
Linuxなどのファイルシステムにおけるパーミッション(権限)設定などで見かけます。
# 8進数で定義 (ファイルパーミッション 755 に相当)
# 7*64 + 5*8 + 5*1 = 493
octal_val = 0o755
print(f"値: {octal_val}")
実行結果:
値: 493
3. 16進数 (0x)
メモリ番地やカラーコード、文字コードなど、幅広い分野で使用されます。
# 16進数で定義 (RGBカラーの赤色などを想定)
# FF(255) * 65536 + 00 * 256 + 00
hex_val = 0xFF0000
print(f"値: {hex_val}")
実行結果:
値: 16711680
10進数をN進数の文字列に変換する
逆に、10進数の数値を「2進数表記の文字列」などに変換して確認したい場合は、以下の組み込み関数を使用します。
bin(x): 2進数文字列へ変換oct(x): 8進数文字列へ変換hex(x): 16進数文字列へ変換
number = 255
print(f"2進数: {bin(number)}")
print(f"8進数: {oct(number)}")
print(f"16進数: {hex(number)}")
実行結果:
2進数: 0b11111111
8進数: 0o377
16進数: 0xff
まとめ
- Pythonではプレフィックスを付けることで、N進数を直接コードに記述できます。
0b: 2進数0o: 8進数0x: 16進数- 内部的にはすべて整数の
int型として扱われ、計算や出力の際には区別なく使用できます。
