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

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

この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。

問題の概要

問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。

この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。

方法1:再帰を使った実装

10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。

サンプルコード

def DecimalToBinary(num):
    if num > 1:
        DecimalToBinary(num // 2)
    print(num % 2, end = '')
# main
if __name__ == '__main__':
    # 10進数の入力
    dec_val = 56
    # 2進数への変換と出力
    DecimalToBinary(dec_val)

実行結果

111000

仕組みの解説

このコードでは、変数と関数はすべてグローバルスコープで宣言されています。処理の流れは以下の通りです。

  1. 56 を 2 で割ると商は 28、余りは 0
  2. 28 を 2 で割ると商は 14、余りは 0
  3. 14 を 2 で割ると商は 7、余りは 0
  4. 7 を 2 で割ると商は 3、余りは 1
  5. 3 を 2 で割ると商は 1、余りは 1
  6. 1 はこれ以上割れないため、余り 1 を出力して終了

再帰呼び出しが最深部に達した時点から戻りながら余りが出力されるため、結果として「111000」という正しい2進数が得られます。

方法2:組み込み関数bin()を使う実装

Pythonには標準で bin() 関数が用意されています。この関数は整数を引数に取ると、「0b」という接頭辞が付いた2進数文字列を返します。そのため、replace() メソッドで「0b」を取り除くだけで変換が完了します。

サンプルコード

def decimalToBinary(n):
    return bin(n).replace("0b", "")
# Driver code
if __name__ == '__main__':
    print(decimalToBinary(56))

実行結果

111000

こちらも同様に、変数と関数はすべてグローバルスコープで宣言されています。再帰版と比べてコード量が少なく、Pythonicで読みやすいのが特徴です。なお、Python 2.6以降では書式指定を使って format(n, "b") や f文字列の f"{n:b}" でも同じ結果が得られます。

まとめ

この記事では、Pythonで10進数を2進数に変換する2つの方法を学びました。

  • 再帰を使った方法: 変換のアルゴリズム的な仕組みを理解するのに最適
  • 組み込み関数bin()を使う方法: 簡潔で実用的、実務での利用に向いている

学習目的なら再帰版、実際の開発ではbin()を使った方法を選ぶとよいでしょう。状況に応じて使い分けてください。


  1. Pythonで16進数の文字列を10進数に変換する方法を解説

    この記事では、16進数の文字列を10進数に変換する問題の解決策について詳しく解説します。課題の概要16進数形式の文字列が与えられたとき、それを対応する10進数の値に変換することを目標とします。例えば、16進数の「F」は10進数では「15」に相当します。この問題には主に2つのアプローチがあります。力ずく(ブルートフォース)な手法:int関数を使った明示的な型変換組み込みモジュールを活用する手法:astモジュールのliteral_eval関数を使用方法1:int関数を使った変換最もシンプルで一般的な方法は、Pythonの組み込み関数であるint()を利用するものです。この関数は2つの引数を受け取り

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

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