#include "ieee754.h"
#include <stdio.h>
#include <math.h>
//This program convert a floating number to its binary representation
(IEEE754) in computer memory
int main()
{
long double f, binaryTotal, binaryFrac = 0.0, frac, fracFractor = 0.1;
long int integer, binaryInt = 0;
long int p = 0, rem, temp;
printf("\nEnter floating number: ");
scanf("%Lf",&f);
//separate the integer part from the input floating number
integer = (int)f;
//separate the fractional part from the input floating number
frac = f - integer;
//loop to convert integer part to binary
while(integer != 0)
{
rem = integer % 2;
binaryInt = binaryInt + rem *pow(10,p);
integer = integer/2;
p++;
}
//loop to convert fractional part to binary
while(frac != 0)
{
frac = frac * 2;
temp = frac;
binaryFrac = binaryFrac + fracFractor * temp;
if (temp == 1)
frac = frac - temp;
fracFractor = fracFractor/10 ;
}
binaryTotal = binaryInt + binaryFrac;
printf("binary equivalent = %Lf\n", binaryTotal);
}
Я пытаюсь преобразовать число с плавающим числом в двоичное представление (64-разрядное). Этот код работает, но не совершенен. Например, когда я конвертировать .575 это дает мне 0.100100, но когда я делаю преобразование, используя этот сайт http://www.exploringbinary.com/floating-point-converter/, правый выход должен быть 0,1001001100110011001100110011001100110011001100110011Преобразование плавающего числа в двоичную программу представления в C
У меня возникают проблемы с пониманием того, что делает мой код усечь число. Может ли кто-нибудь помочь мне, как это исправить? Я ценю вашу помощь.
Compile со всеми предупреждениями поддержкой. –
@MichaelWalz нет предупреждения: http: // ideone.com/aIShip – mch
@mike вы должны написать, сколько цифр вы хотите после '.':' '% .20Lf' 'будет печатать' 0.10010011001100110011'. – mch