Você está na página 1de 5

Programas en c++ para convertir decimales fraccionarios a

binario, y binarios fraccionarios a decimal

Programa binfracc2dec.cc que convierte binario fraccionario a decimal fraccionario.

// C++ program to demonstrate above steps of


// binary fractional to decimal conversion
#include<bits/stdc++.h>
using namespace std;

// Function to convert binary fractional to


// decimal
double binaryToDecimal(string binary, int len)
{
// Fetch the radix point
size_t point = binary.find('.');

// Update point if not found


if (point == string::npos)
point = len;

double intDecimal = 0, fracDecimal = 0, twos = 1;

// Convert integral part of binary to decimal


// equivalent
for (int i = point-1; i>=0; --i)
{
// Subtract '0' to convert character
// into integer
intDecimal += (binary[i] - '0') * twos;

1
twos *= 2;
}

// Convert fractional part of binary to


// decimal equivalent
twos = 2;
for (int i = point+1; i < len; ++i)
{
fracDecimal += (binary[i] - '0') / twos;
twos *= 2.0;
}

// Add both integral and fractional part


return intDecimal + fracDecimal;
}

// Driver code
int main()
{
string n = "110.101";
cout << binaryToDecimal(n, n.length()) << "\n";

n = "101.1101";
cout << binaryToDecimal(n, n.length());

return 0;
}
Se compila utilizando g++ de GNU
Shell] g++ -lm -o binfracc2dec binfracc2dec.cc
Shell] ./binfracc2dec

6.625
5.8125

Shell]

2
Programa decfraccionario2binario.cc que convierte decimal fraccionario a binario fraccionario.

// C++ program to convert fractional decimal


// to binary number
#include<bits/stdc++.h>
using namespace std;

// Function to convert decimal to binary upto


// k-precision after decimal point
string decimalToBinary(double num, int k_prec)
{
string binary = "";

// Fetch the integral part of decimal number


int Integral = num;

// Fetch the fractional part decimal number


double fractional = num - Integral;

// Conversion of integral part to


// binary equivalent
while (Integral)
{
int rem = Integral % 2;

// Append 0 in binary
binary.push_back(rem +'0');

Integral /= 2;

3
}

// Reverse string to get original binary


// equivalent
reverse(binary.begin(),binary.end());

// Append point before conversion of


// fractional part
binary.push_back('.');

// Conversion of fractional part to


// binary equivalent
while (k_prec--)
{
// Find next bit in fraction
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;
}

// Driver code
int main()
{

4
double n = 4.47;
int k = 3;
cout << decimalToBinary(n, k) << "\n";

n = 6.986 , k = 5;
cout << decimalToBinary(n, k);
return 0;
}

De manera similar se compila y se ejecuta


Shell] g++ -lm -o decfraccionario2binario decfraccionario2binario.cc
Shell] ./decfraccionario2binario

100.011
110.11111

Shell]

Para utilizarlos sólo deben editar el // Driver code para aplicarlo a los números que vayan a convertir.

Você também pode gostar