Pythonで2進数・8進数・16進数を扱う:数値リテラルのプレフィックスと表記法

Pythonのプログラム内で数値を扱う際、通常は10進数(0〜9)を使用しますが、用途によっては2進数、8進数、16進数で記述した方が直感的な場合があります。

例えば、ビット演算を行う場合は2進数が、ファイルパーミッションの設定には8進数が、色情報の指定やバイナリデータの処理には16進数が適しています。

Pythonでは、数値の先頭に特定の**プレフィックス(接頭辞)**を付けることで、これらのN進数を直接記述できます。

この記事では、各進数の表記方法と、Pythonでの扱いについて解説します。

目次

N進数表記のプレフィックス一覧

Pythonで利用できる主な整数リテラルの表記は以下の通りです。大文字・小文字は区別されませんが、読みやすさのために小文字(0xなど)が使われることが一般的です。

プレフィックス進数意味使用できる文字
0b または 0B2進数 (Binary)2を基数とする数値0, 1
0o または 0O8進数 (Octal)8を基数とする数値07
0x または 0X16進数 (Hexadecimal)16を基数とする数値09, af (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 型として扱われ、計算や出力の際には区別なく使用できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次