Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで10進数⇔2進数の相互変換を行う方法

10進数の数値と2進数の数値が与えられたとき、それぞれを相手側の記数法へ変換するのが本稿のテーマです。ここではPythonを使って、「10進数→2進数」「2進数→10進数」の双方向の変換処理を自作する方法を解説します。

アルゴリズム

BintoDec():2進数から10進数への変換

Step1: 2進数を入力する。
Step2: 入力された2進数の桁数(文字列の長さ)を取得する。
Step3: forループを使って2進数を10進数へ変換する。
例えば2進数が「1111」の場合、計算は次のようになります。
1*2**3 + 1*2**2 + 1*2**1 + 1*2**0 = 15
Step4: 結果を表示する。

DectoBin():10進数から2進数への変換

Step1: 10進数を入力する。
Step2: whileループを使用する。
・数値を2で割り、商と余りを求める。1で初期化した別の変数を用意し、
 余りにこの変数を掛けた値を出力結果へ加算していく。この変数は
 各ループで10倍されるため、桁の位置が1つずつ左へ移動していきます。
・最初に得られた余りが、結果の末尾(一番下の桁)になります。
Step3: 値を表示する。

サンプルコード

print("*****************************************************")
print("  DECIMAL TO BINARY AND BINARY TO DECIMAL CONVERSION")
print("*****************************************************")
print(" For Decimal to Binary...Press 1.")
print(" For Binary to Decimal... Press 2")
print("*****************************************************")

my_choice = int(input("Enter your choice: "))

if my_choice == 1:
    i = 1
    s = 0
    my_dec = int(input("Enter decimal to be converted: "))
    while my_dec > 0:
        rem = int(my_dec % 2)
        s = s + (i * rem)
        my_dec = int(my_dec / 2)
        i = i * 10
    print("The binary of the given number is ", s, ".")
else:
    my_bin = input("Enter binary to be converted: ")
    n = len(my_bin)
    res = 0
    for i in range(1, n + 1):
        res = res + int(my_bin[i - 1]) * 2 ** (n - i)
    print("The decimal of the given binary is ", res, ".")

print("******************************************************")

実行結果

選択肢「1」を入力して10進数「15」を変換した場合:

*****************************************************
DECIMAL TO BINARY AND BINARY TO DECIMAL CONVERSION
*****************************************************
Enter your choice: 1
Enter decimal to be converted: 15
The binary of the given number is  1111 .
******************************************************

選択肢「2」を入力して2進数「1111」を変換した場合:

*****************************************************
DECIMAL TO BINARY AND BINARY TO DECIMAL CONVERSION
*****************************************************
Enter your choice: 2
Enter binary to be converted: 1111
The decimal of the given binary is  15 .
******************************************************

補足:組み込み関数を使ったより簡単な方法

学習目的で自作アルゴリズムを理解することは大切ですが、実際の開発ではPython標準の組み込み関数を使うことで、変換処理をわずか1行で書くことができます。

  • 10進数 → 2進数bin(15) を実行すると '0b1111' が返ります。接頭辞「0b」を除きたい場合は format(15, 'b')bin(15)[2:] を利用します。
  • 2進数 → 10進数int('1111', 2) を実行すると 15 が返ります。第2引数に基数「2」を指定するだけで変換可能です。

ループ処理による変換の仕組みを理解した上で、実務ではこれらの組み込み関数を活用するのが効率的でしょう。

  1. Pythonで10進数を2進数に変換する方法|再帰処理とbin()関数の実装例

    この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。 問題の概要 問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。 この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。 方法1:再帰を使った実装 10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。 サンプルコード def DecimalToBinary(num): if num &g

  2. Pythonで10進数を2進数に変換する方法|再帰と組み込み関数の2つのアプローチ

    この記事では、10進数で表された数値を2進数に変換するPythonプログラムについて、その考え方と具体的な実装方法をわかりやすく解説します。 問題文 ある整数が与えられたとき、その数値を2進数に変換します。例えば、10進数の「35」は2進数では「100011」と表現されます。 アプローチ1:再帰を使った解法 再帰処理を利用すると、シンプルなコードで10進数を2進数に変換できます。基本的な流れは以下の擬似コードのとおりです。 DecToBin(num):     if num > 1:      &n