Danke für die Hilfe! Bin jetzt schon gut im Rennen
Was geht:
Habe den float in 2 int's eingelesen (ganzzahl und rest)
Vorzeichen berechnen
Exponenten berechnen
binäre (reduzierte & erweiterte) mantisse ausgeben
normierte mantisse/denormalisierte mantisse in dezimal und binärwerten ausgeben
Das einzige Problem noch: ich bekomm als ascii-code bei ganzzahl 2345 und bei rest 1 raus, das kann nicht ganz richtig sein??
void RNOFloat::toASCII_c(char str[])
{
// add your c code of the algorithm here
float RNOFloat = value; //Gleitkommazahl, die konvertiert werden soll
unsigned int *ptr, bit, maske;
int i, exp, vorzeichen;
int ganzzahl = abs( static_cast<int>(RNOFloat) );
printf("\nGanzzahl: %d",ganzzahl);
printf("\n");
int rest = abs ( static_cast<int>((RNOFloat - ganzzahl) * 100000));
printf("Rest: %d",rest);
printf("\n\n");
ptr = (unsigned int*) &RNOFloat;
bit = *ptr;
maske = 1 << 31; // maske = (unsigned int) 1 << 31;
printf("Vorzeichen: ");
if (maske & bit){ //maske & bit filtert das Vorzeichen-Bit heraus; Bitweiser Vergleich; 0 positiv; 1 negativ
printf("1");
vorzeichen = 1;
}
else
{
printf("0");
vorzeichen = 0;
}
printf("\nExponent: ");
exp = 0; //Initialisierung
for (i=0; i<8; i++){ //durchlaufe Schleife bis i=8 --> float: Exponent hat 8 Bits;
maske >>= 1;
exp <<= 1;
if (maske & bit){
exp++;
}
}
exp -= 127; //von exp wird der BIAS-Wert von 127 abgezogen
printf("%d\n", exp);
printf("erweiterte binäre Mantisse: 1."); //1 wird eingefügt, dahinter folgt die reduzierte Mantisse
for (i=0; i<23; i++){ //23 Bits für Mantisse reserviert; IEEE754
maske >>= 1;
if (maske & bit){
printf("1");
}
else {
printf("0");
}
}
//Schritt 1 erledigt: Berechnung Mantisse, Exponent und Vorzeichenbit
//Schritt 2: denormalisieren der Mantisse, dies wird im Binärsystem durch shiften erreicht (dezimal: * 2^3)
//m = x/2^exp
float norm_mantisse = RNOFloat/pow(2.0,exp);
printf("\n\nDezimaldarstellung:\nnormierte Mantisse: %f\n", norm_mantisse);
//Norm. Mantisse = erw. Mantisse dez./2^23
// --> erw. Mantisse dez. = norm. Mantisse * 2^23
int erw_mantisse = norm_mantisse * pow(2.0,23.0);
printf("Erweiterte Mantisse: %d", erw_mantisse);
int den_mantisse = erw_mantisse * pow(2.0,3.0);
printf("\nDenormalisierte Mantisse: %d\n", den_mantisse);
printf("Binaerwert: ");
//Berechnung binäre denorm. Mantisse:
int int_bit_size = 0;
int_bit_size = sizeof(int) * 8;
for(i = 0; i < int_bit_size; i++){
printf("%d", (rest & 0x80000000) >> 31);
rest <<= 1;
}
printf("\n");
char c;
i = 0;
do {
str[i++]= ganzzahl % 10 + '0';
cout << str;
ganzzahl /= 10;
} while (ganzzahl > 0);
str[i--] = '\0';
// reverse order
for (int x = 0, y = i; x<y; x++, y--) {
c = str[x];
str[x] = str[y];
str[y] = c;
}
//Rest
printf("\n");
i=0;
do {
str[i++]= rest % 10 + '0';
cout << str;
rest /= 10;
} while (rest > 0);
str[i--] = '\0';
// reverse order
for (int x = 0, y = i; x<y; x++, y--) {
c = str[x];
str[x] = str[y];
str[y] = c;
}
printf("\n");
}
Ist das soweit richtig?