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

10進数を2進数に変換するC言語プログラムの作り方【小数対応】


ここでは、C言語で10進数の小数を2進数の小数に変換する方法を、具体的な計算例をもとにわかりやすく解説します。

変換の基本的な考え方

整数部分:「2で割って余りを集める」

整数部分は、2で割った余りを記録し、商が0になるまで割り算を続けることで求められます。最後に余りを下から(逆順に)並べると2進数になります。

小数部分:「2を掛けて整数部分を取り出す」

小数部分は、2を掛けた結果の整数部分を取り出す操作を繰り返します。取り出した整数部分を上から順に並べると、2進数の小数になります。

例1:25を2進数に変換する

  • ステップ1 − 25 ÷ 2 … 余り:1、商:12
  • ステップ2 − 12 ÷ 2 … 余り:0、商:6
  • ステップ3 − 6 ÷ 2 … 余り:0、商:3
  • ステップ4 − 3 ÷ 2 … 余り:1、商:1
  • ステップ5 − 1 ÷ 2 … 余り:1、商:0

余りを逆順に並べると、25の2進表現は「11001」となります。

例2:0.7を2進数に変換する

  • ステップ1 − 0.7 × 2 = 1.4 … 整数部分:1
  • ステップ2 − 0.4 × 2 = 0.8 … 整数部分:0
  • ステップ3 − 0.8 × 2 = 1.6 … 整数部分:1
  • ステップ4 − 0.6 × 2 = 1.2 … 整数部分:1
  • ステップ5 − 0.2 × 2 = 0.4 … 整数部分:0
  • ステップ6 − 0.4 × 2 = 0.8 … 整数部分:0

整数部分を順に並べると、0.7の2進近似値は「0.101100」です。なお、有限小数でも2進数では無限に続く場合があるため、ここでは小数第6位まで計算しています。

25.7を2進数に変換する

最後に、整数部分と小数部分を組み合わせます。

11001 + 0.101100 = 11001.101100

したがって、10進数の25.7を2進数に変換すると「11001.101100」となります。

サンプルコード

以下は、10進数の小数を2進数に変換するCプログラムです。

#include<stdio.h>
int main(){
    long double fraDecimal,fraBinary,bFractional = 0.0,dFractional,fraFactor=0.1;
    long int dIntegral,bIntegral=0;
    long int intFactor=1,remainder,temp,i;
    printf("Enter any fractional decimal number: ");
    scanf("%Lf",&fraDecimal);
    dIntegral = fraDecimal;
    dFractional = fraDecimal - dIntegral;
    while(dIntegral!=0){
        remainder=dIntegral%2;
        bIntegral=bIntegral+remainder*intFactor;
        dIntegral=dIntegral/2;
        intFactor=intFactor*10;
    }
    for(i=1;i<=6;i++){
        dFractional = dFractional * 2;
        temp = dFractional;
        bFractional = bFractional + fraFactor* temp;
        if(temp ==1)
            dFractional = dFractional - temp;
        fraFactor=fraFactor/10;
    }
    fraBinary = bIntegral + bFractional;
    printf("Equivalent binary value: %lf",fraBinary);
    return 0;
}

プログラムのポイント

  • 整数部の処理: 剰余演算子 % で余りを求め、intFactor を10倍しながら桁をずらして2進表現を組み立てています。
  • 小数部の処理: 小数部に2を掛けて整数部分を取り出し、fraFactor(0.1、0.01、…)で重み付けしながら加算しています。
  • 計算精度: この例では小数部を6桁まで計算しています。必要な精度に応じてループ回数を調整できます。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Enter any fractional decimal number: 5.7
Equivalent binary value: 101.101100

  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