この記事では、進数変換に関して解説します。
N進数から10進数、10進数からN進数への変換をそれぞれ扱っていきます。
2,8,16進数の記述方法
2,8,16進数の場合、そのままの進数で表記することが可能です。
単に、これらの進数が10進数だといくつになるのかを知りたい場合はこの方法が最も簡単だと思います。
それでは、記述方法をみていきましょう。
>>> 0b101
5
>>> 0o101
65
>>> 0x101
257
この様に、先頭にプレフィックスを付けてあげることによって、各進数を表すことが出来ます。
2進数が「0b」、8進数が「0o」、16進数が「0x」となっています。これらのプレフィックスは、以降度々出てくるので、覚えておくと楽かもしれません。
この記法で記述した場合、10進数の整数型(int)として扱われます。何進数で表記したかの情報は失われるので注意しましょう。
その他の記述方法
プレフィックスは、大文字でも可
>>> 0B101
5
_(アンダースコア)を挟んでも良い
>>> 0b_101
5
>>> 0b_1_0_1
5
N進数から10進数へ変換
intを使用したN進数→10進数
int関数を使用したN進数→10進数の変換です。
int関数を使用した場合、2<=N<=36の制約がかかります。これは、数字10文字とアルファベット26文字で表せる最大値です。
使用方法は、int(N進数の文字列, N)となります。
>>> int("101", 2)
5
>>> int("101", 8)
65
>>> int("101", 16)
257
>>> int("101", 32)
1025
プレフィクスをつける場合は、進数と一致するものにしないとエラーが発生するので注意が必要です。
>>> int("0x101", 16)
257
>>> int("0x101", 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '0x101'
10進数からN進数へ変換
bin,oct,hexを使用した10進数→N進数
2進数、8進数、16進数への変換は標準関数が用意されています。
2進数への変換はbin、8進数への変換はoct、16進数への変換はhexになります。
それぞれ使用例を見ていきましょう。
>>> bin(5)
'0b101'
>>> oct(65)
'0o101'
>>> hex(257)
'0x101'
format(100, ‘x’)
2進数、8進数、16進数への変換は、formatを使用することで実現することも可能です。
>>> format(5, "b")
'101'
>>> format(65, "o")
'101'
>>> format(257, "x")
'101'
print(np.base_repr(10, 7))
2進数から32進数までの任意の進数への変換は、numpyライブラリのbase_reprを使用します。
>>> import numpy as np
>>> np.base_repr(5, 2)
'101'
>>> np.base_repr(65, 8)
'101'
>>> np.base_repr(257, 16)
'101'
>>> np.base_repr(1025, 32)
'101'
まとめ
N進数⇄10進数の進数変換について解説しました。
方法は色々あるので、自分に合ったやり方を使っていきましょう。
他にも解説記事をあげているので良ければ読んでみてください。
コメント