【Python】記数法の変換(10進数⇔n進数)

PythonのTopに戻る


 

 $n$進数から$10$進数へ変換

int関数の2つ目の引数として整数を指定すると基数を指定できる。(‘100’, 2) とすると$2$進数表記における$100$を$10$進数表記に変換する。

print(int('100', 2))
print(int('100', 3))
print(int('100', 4))
print(int('100', 8))
print(int('100', 16))
4
9
16
64
256

2つ目の引数には$2$~$36$までの整数を指定しなければならない。それ以外の整数を書いた場合は以下のようなエラーが出る。

ValueError: int() base must be >= 2 and <= 36, or 0

また、1つ目の引数には文字列を指定しなければならない。ただし文字列であっても “100.0” のように整数型でないと invalid literal だと言われて怒られる。

 

 $10$進数から$n$進数へ変換

上で$n$進数表記における整数を$10$進数表記に変換するのはint関数で可能であることを確認した。反対に$10$進数を$2$進数、$8$進数、$16$進数のそれぞれに変換するには以下のようにする。

x = 10
print(bin(x))
print(oct(x))
print(hex(x))
0b1010
0o12
0xa

この返り値には「0b」といった接頭辞が付く。

$10$進数表記の整数を任意の記数法に変換する方法は自作する必要がある。

def base10int(value, base):
    if (int(value / base)):
        return base10int(int(value / base), base) + str(value % base)
    return str(value % base)

print(base10int(100, 4))
1210
16

あるいは以下のようにリスト化しても良い。やっていることは上と同じ。

def base10int(value, base):
    upper = value > base and base10int(value // base, base) or []
    return upper + [value % base]  # リストの結合

print(base10int(100, 4))
[1, 2, 1, 0]

PythonのTopに戻る