k_mishima
30-04-2007, 21:41
Ciao, devo fare questo esercizio sempre sulle rappresentazioni di numeri :muro:
Non riesco a far visualizzare correttamente la mantissa, e non capisco dove ho sbagliato
La traccia dell'esercizio sta a inizio codice
/* Scrivere una function per la rappresentazione di un numero float (s,e,m) */
#include <stdio.h>
void FLOAT (float x, short *segno, short *esponente, int mantissa[23]);
void dec2bin(unsigned int inp, char binstr[8]);
main()
{
short segno,esponente,i;
int mantissa[23];
char esponente_b[8];
float x;
puts("Un float e' rappresentato da 32 bit cosi' divisi secondo lo standard IEEE 754");
puts("1 bit per il segno");
puts("8 bit per l'esponente");
puts("23 bit per la mantissa\n");
puts("Il bit segno e' 0 se il numero e' positivo, 1 se e' negativo");
puts("L'esponente si rappresenta come un BIASED quindi vale da 0 a 255\n");
puts("Ricordarsi che un bit della mantissa e' implicito e che qui i\nnumeri sono normalizzati");
puts("Digita il numero da rappresentare: ");
scanf("%f",&x);
FLOAT(x,&segno,&esponente,mantissa);
dec2bin(esponente,esponente_b);
printf("\nSEGNO: %hd\n",segno);
printf("ESPONENTE: ");
for (i=0;i<8;i++)
printf("%c",esponente_b[i]);
printf("\nMANTISSA: ");
for (i=22;i>=0;i++)
printf("%d",mantissa[i]);
printf("\n");
system("pause");
}
void FLOAT (float x, short *segno, short *esponente, int mantissa[23])
{
short i,BIAS=127;
*esponente=0;
if (x>=0)
*segno=0;
else
*segno=1;
while (((int)x>1))
{
mantissa[22-*esponente]=(int)x%2;
x/=2;
*esponente+=1;
}
for (i=22-(*esponente);i>=0;i--)
mantissa[i]=0;
*esponente+=BIAS;
}
void dec2bin(unsigned int inp, char binstr[8])
{
int i;
for (i = 0; i < 8; i++, inp >>= 1)
binstr[7-i] = (inp & 1) + '0';
}
Qualcuno sa' dove ho sbagliato? Tnx
Non riesco a far visualizzare correttamente la mantissa, e non capisco dove ho sbagliato
La traccia dell'esercizio sta a inizio codice
/* Scrivere una function per la rappresentazione di un numero float (s,e,m) */
#include <stdio.h>
void FLOAT (float x, short *segno, short *esponente, int mantissa[23]);
void dec2bin(unsigned int inp, char binstr[8]);
main()
{
short segno,esponente,i;
int mantissa[23];
char esponente_b[8];
float x;
puts("Un float e' rappresentato da 32 bit cosi' divisi secondo lo standard IEEE 754");
puts("1 bit per il segno");
puts("8 bit per l'esponente");
puts("23 bit per la mantissa\n");
puts("Il bit segno e' 0 se il numero e' positivo, 1 se e' negativo");
puts("L'esponente si rappresenta come un BIASED quindi vale da 0 a 255\n");
puts("Ricordarsi che un bit della mantissa e' implicito e che qui i\nnumeri sono normalizzati");
puts("Digita il numero da rappresentare: ");
scanf("%f",&x);
FLOAT(x,&segno,&esponente,mantissa);
dec2bin(esponente,esponente_b);
printf("\nSEGNO: %hd\n",segno);
printf("ESPONENTE: ");
for (i=0;i<8;i++)
printf("%c",esponente_b[i]);
printf("\nMANTISSA: ");
for (i=22;i>=0;i++)
printf("%d",mantissa[i]);
printf("\n");
system("pause");
}
void FLOAT (float x, short *segno, short *esponente, int mantissa[23])
{
short i,BIAS=127;
*esponente=0;
if (x>=0)
*segno=0;
else
*segno=1;
while (((int)x>1))
{
mantissa[22-*esponente]=(int)x%2;
x/=2;
*esponente+=1;
}
for (i=22-(*esponente);i>=0;i--)
mantissa[i]=0;
*esponente+=BIAS;
}
void dec2bin(unsigned int inp, char binstr[8])
{
int i;
for (i = 0; i < 8; i++, inp >>= 1)
binstr[7-i] = (inp & 1) + '0';
}
Qualcuno sa' dove ho sbagliato? Tnx