Ich muss einen Float zu IEEE (der Float wird durch eine scanf, und es muss von der scanf kommen, sonst wird es fallen und Fehler) und ich scheinen nicht zu bekommen es funktioniert. Ich habe versucht, argc und argv zu verwenden, und es war korrekt, aber meine einreichende Plattform hat es nicht akzeptiert, weil ich den Schwimmer durch einen Scan bekommen muss. Das Problem ist, da ich versuche, den Scan zu verwenden, wird es nicht die richtigen Bits drucken.Konvertieren Float in IEEE-Format in C
Der Ausgang für die Nummer 10 sollte sein:
Bits: 01000001001000000000000000000000
sinal: +
expoente: 3
Mantisse: 1,25000000
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char Byte;
int expoente;
char sinal;
float mant=1;
int vector[32];
int vectorCounter=0;
char number;
void escreve_IEEE(char sinal, int expoente, float mant)
{
printf ("sinal: %c\n", sinal);
printf ("expoente: %d\n", expoente);
printf ("mantissa: %.8f\n", mant);
}
int expoenteBaseDois(int exp)
{
int result = 1;
int i = 0;
while (i < exp) {
result = 2 * result;
i++;
}
return result;
}
void conversion(Byte b[]) {
int i = 3;
int v;
int s;
while (i >= 0) {
v = b[i];
s = 7;
while (s >= 0) {
vector[vectorCounter] = (v >> s) & 1;
vectorCounter++;
s--;
}
i--;
}
vectorCounter = 0;
if(vector[vectorCounter]==0) sinal='+';
else sinal='-';
vectorCounter++;
int exp = -127;
s = 7;
while (vectorCounter <= 8) {
exp = exp + vector[vectorCounter] * expoenteBaseDois(s);
s--;
vectorCounter++;
}
expoente = exp;
s = 1;
while (vectorCounter <= 31) {
mant = mant + vector[vectorCounter] * (1.0/(expoenteBaseDois(s)));
s++;
vectorCounter++;
}
}
int main(int argc, char *argv[]) {
float num;
scanf("%f", &num);
number= *(char*)#
conversion((Byte *) &number);
vectorCounter=0;
printf("bits: ");
while(vectorCounter>=0 && vectorCounter<32)
{
printf("%d",vector[vectorCounter]);
vectorCounter++;
}
printf("\n");
escreve_IEEE(sinal, expoente, mant);
return 0;
}
ich das Guss gelöscht und es gibt mir immer noch die falsche Antwort: Bits: 00000000000000000000000000000000 sinal: + expoente: -127 Mantisse: 1,00000000 –
@FranciscoCavalheiroCosta mit meiner Behebung ist die Ausgabe nicht korrekt. Übrigens ist Ihr Code abhängig von der Plattformendianess. – LPs
Ich habe es falsch auf dem Terminal ausgeführt. Vielen Dank! –