#include <stdio.h>
#include <math.h>#include <stdlib.h>
int n;
int shk;
int i=0;
int k=0;
int c;
int a;
int q;
int j;
int count=0;
int intera=0;
int cifman[10000];
float fcifman[10000];
float decimale=0;
int desp=0;
int dec=0;
int resto=0;
float numdecimale=0;
float virgola=0;
unsigned long long dmant=0;
unsigned long long dmont=0;
unsigned long long demon=0;
unsigned long long montd=0;
int sign[256];
char s[256];
int main()
{
//input
do
{
s[0]=getch();
sign[i]=atoi(s);
printf("%d", sign[i]);
if(i==0||i==8)
{
printf(" ");
}
i++;
}while(i<32);
//segno
if(sign[0]==1)
printf("-");
//esponente
for(i=1;i<=8;i++)
{
desp=desp+sign[i]*pow(2,8-i); //contiene l'esponente + bias
}
desp=desp-127;
printf("\n esponente %d",desp);
//mantissa
k=31;
do
{
k--;
count++;
}while(sign[k]==0); //conta gli 0 a destra
c=(31-count)-9; //considera solo la mantissa con valore
count=c;
for(j=9;j<=k;j++)
{
dmant=dmant+sign[j]*pow(10,c); //contiene il binario-decimale della mantissa
c--;
}
//printf("\n %llu",dmant);
dmont=dmant+10*pow(10,(count)); //contiene dman con l'1.xxx sottointeso
printf("\n dmont %llu",dmont);
k=0;
do
{
k++;
virgola=dmont*pow(10,-k);
}while(virgola>=2);
//printf("\n %f",virgola);
virgola=virgola*pow(10,desp); //contiene la mantissa elevata all'esponente
//printf("\n %f",virgola);
intera=virgola; //contiene la parte intera di virgola
decimale=virgola-intera; //contiene la parte decimale di virgola
printf("\n intera %d",intera);
printf("\n decimale %0.9f",decimale);
/*professore sono da 4 ore su sto pezzo, non ha niente che non va ma non funziona. È l'1:32 io non posso continuare a provare a risolvere il nulla
for(i=1;i<=a;i++)
{
decimale = decimale*10;
cifman[i]=decimale; //contiene la singola cifra di decimale
if(cifman[i]>1) //se il valore ha più cifre
{
cifman[i]=cifman[i]-10; //rimuove le cifre a sinistra
decimale = decimale -10;
}
}
*/
montd=dmont;
do
{
montd=montd/10;
a++;
}while(montd!=0);
shk=a;
do
{
i++;
shk--;
cifman[i]=dmont*pow(10,-a);
}while(cifman[i]!=0);
printf("\n prova \n");
for(i=1;i<=a;i++)
{
printf(" %d ", cifman[i]);
}
i=0;
while(intera!=0)
{
resto=intera%10; //contiene
dec = dec + resto*i; //contiene
i=i*2; //contiene
intera=intera/10; //contiene
}
//numdecimale=decimale*pow(2,(desp+1));
//printf("\n %f",numdecimale);
return 0;
}