#include <stdio.h>

#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;

}

Report Page