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

浮動小数点数を2進数(バイナリ)に変換するPythonプログラム

浮動小数点数の値と、出力に含める小数点以下の桁数が与えられたとき、その値を2進数(バイナリ)形式へ変換するのがこのプログラムの目的です。

基本の考え方はシンプルです。まず浮動小数点値から整数部を取り出して2進数に変換し、次に小数部を2進数に変換し、最後に両者を結合します。

変換アルゴリズムの流れ

  1. 入力された浮動小数点数を、整数部と小数部に分割する
  2. 整数部はPythonの組み込み関数 bin() を使って2進数へ変換する
  3. 小数部は「2倍して整数部分を取り出す」操作を指定桁数だけ繰り返し、各桁のビットを順に求める
  4. 整数部と小数部を小数点「.」で連結して完成させる

計算例

浮動小数点値:22.625
10進数の 22 を2進数へ変換 → 10110
10進数の 0.625 を2進数へ変換 → 0.101
整数部と小数部を結合して 10110.101 を得る

小数部の変換では、「0.625×2=1.25 → 1」「0.25×2=0.5 → 0」「0.5×2=1.0 → 1」というように、乗算のたびに現れる整数部分を左から並べることで 0.101 が導かれます。この手法は「基数乗算法(掛け算法)」と呼ばれる定番の方法です。

サンプルコード

def float_binary_convert(my_number, places=3):
    my_whole, my_dec = str(my_number).split(".")
    my_whole = int(my_whole)
    my_dec = int(my_dec)
    res = bin(my_whole).lstrip("0b") + "."
    for _ in range(places):
        my_whole, my_dec = str((my_decimal_converter(my_dec)) * 2).split(".")
        my_dec = int(my_dec)
        res += my_whole
    return res


def my_decimal_converter(num):
    while num > 1:
        num /= 10
    return num


# 動作確認
n = input("浮動小数点値を入力してください : \n")
p = int(input("結果の小数点以下の桁数を入力してください : \n"))
print(float_binary_convert(n, places=p))

プログラムを実行すると、まず浮動小数点値の入力を求められ、続いて結果に含める小数点以下の桁数を指定します。

実行結果

浮動小数点値を入力してください : 
22.625
結果の小数点以下の桁数を入力してください : 
3
10110.101

たとえば入力が 2.34・桁数 3 の場合は、整数部 2 は「10」、小数部 0.34 は「010」となるため、結果は 10.010 になります。

コードのポイント

  • str() で文字列化してから split(".") を呼ぶことで、整数部と小数部を簡単に分離できます。
  • 整数部は bin() 一つで変換でき、先頭の接頭辞「0b」は lstrip("0b") で取り除きます。
  • 小数部は my_decimal_converter() でいったん「0.xxx」の形に戻してから2倍し、その整数部分を順に結果へ連結していきます。

よりシンプルな実装例

文字列操作に頼らず、数値のまま処理する書き方もあります。こちらの方が直感的で読みやすいでしょう。

def float_to_binary(value, places=3):
    whole = int(value)
    frac = value - whole
    result = bin(whole)[2:] + "."
    for _ in range(places):
        frac *= 2
        bit = int(frac)
        result += str(bit)
        frac -= bit
    return result


print(float_to_binary(22.625))  # 結果:10110.101

注意点

この実装は負の数や指数表記(例:1e-3)の入力には対応していません。また、ほとんどの小数は2進数では有限2進数では有限桁で表現しきれないため、指定した桁数で打ち切られた近似値になる点にも留意してください。内部表現を正確に確認したい場合は、float.hex()struct モジュールの活用も検討するとよいでしょう。


  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