C++で10進小数を2進数に変換する方法(小数点以下の精度指定あり)
この記事では、C++を使って10進数の小数を2進数に変換するプログラムを解説します。
入力として10進数の小数と整数「k」が与えられ、その小数を小数点以下k桁の精度で2進数表現に変換することがゴールです。
変換の基本的な考え方
整数部分の変換方法
整数部分は、数値を2で割り続けて得られる余りを順に並べることで求められます。剰余は下位の桁から順に出てくるため、最後に文字列を反転させて正しい順序に整えます。
小数部分の変換方法
小数部分は、2を掛けた結果の整数部分を順番に取り出すことで求められます。2倍した値が1以上であれば「1」、1未満であれば「0」となり、1以上の場合は1を引いた残りの小数に対して同じ処理を、指定された桁数分だけ繰り返します。
C++による実装例
#include<bits/stdc++.h>
using namespace std;
// 10進数を2進数へ変換する関数
string convert_tobinary(double num, int k_prec) {
string binary = "";
// 整数部分を取得
int Integral = num;
// 小数部分を取得
double fractional = num - Integral;
// 整数部分を2進数に変換
while (Integral) {
int rem = Integral % 2;
binary.push_back(rem +'0');
Integral /= 2;
}
// 文字列を反転して正しい2進数の並びにする
reverse(binary.begin(),binary.end());
binary.push_back('.');
// 小数部分を2進数に変換
while (k_prec--) {
fractional *= 2;
int fract_bit = fractional;
if (fract_bit == 1) {
fractional -= fract_bit;
binary.push_back(1 + '0');
} else
binary.push_back(0 + '0');
}
return binary;
}
int main() {
double n = 4.47;
int k = 3;
cout << convert_tobinary(n, k) << "\n";
n = 6.986 , k = 5;
cout << convert_tobinary(n, k);
return 0;
}実行結果
100.011 110.11111
コードのポイント解説
関数 convert_tobinary では、まず int Integral = num; によって整数部分を切り出し、num - Integral の計算で小数部分を取り出しています。
整数部分は while ループの中で2の剰余を文字列に追加しながら2で割り続け、ループ終了後に reverse 関数で反転することで、正しい順序の2進表現を完成させています。
小数部分は引数 k_prec で指定された回数だけループ処理を行い、各回で2倍した値の整数部が1であれば「1」を出力して1を引き、そうでなければ「0」を出力します。これにより、指定桁数の精度で小数部分が2進化されます。
なお、浮動小数点数には誤差が伴うため、0.1のように2進数で厳密に表現できない10進小数も存在する点には注意が必要です。本プログラムでは指定桁数までの近似値が出力されます。
-
Pythonで10進数を2進数に変換する方法|再帰処理とbin()関数の実装例
この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。 問題の概要 問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。 この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。 方法1:再帰を使った実装 10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。 サンプルコード def DecimalToBinary(num): if num &g
-
Pythonで10進数を2進数に変換する方法|再帰と組み込み関数の2つのアプローチ
この記事では、10進数で表された数値を2進数に変換するPythonプログラムについて、その考え方と具体的な実装方法をわかりやすく解説します。 問題文 ある整数が与えられたとき、その数値を2進数に変換します。例えば、10進数の「35」は2進数では「100011」と表現されます。 アプローチ1:再帰を使った解法 再帰処理を利用すると、シンプルなコードで10進数を2進数に変換できます。基本的な流れは以下の擬似コードのとおりです。 DecToBin(num): if num > 1: &n