Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: IEEE Double Float converter Kategorie: Programmierung (von Newbie - 3.09.2012 15:39)
Als Antwort auf Re: IEEE Double Float converter von André H. - 3.09.2012 14:01
Ich nutze:
C-Control II Unit
Danke!!

> Hallo Mike,
>
> benutze bitte zum Posten von Quellcode die Code-Tags.
>
> > if(value&0x80000000 == 0)      //Wird übersprungen - wieso????
> > sign = 1;
>
> Dies wird definitiv nicht übersprungen .
>
>  
> > if(value&0x80000000 == 0)  gibt offenbar nicht 0
> >
> > Beispielsweise 0x41c90000 sollte 25.125 ergeben - aber das Vorzeichen stimmt nicht.
>  
> Naja, es wird genau ausgeführt, was Du geschrieben hast.
> Nur ist es eben so, daÃ? es eine Rangfolge der Operatoren gibt. (Siehe auch Handbuch)
> Punkt vor Strich ist ja bekannt. Genauso haben auch Vergleiche (gleich, kleiner, grö�er etc.)
> Vorrang vor verknüpfenden Operatoren (und, oder, xor etc.)
> Demnach ist Deine If-Bedingung immer false, da zuerst 0x80000000 mit 0 verglichen wird,
> und anschlie�end das Erbenis mit value "und"-verknüpft wird.
> Da Du aber das höchste Bit ausmaskieren willst, mu� Du hier zwingend Klammern setzen.
> Ã?brigens muÃ?t Du in C2 keine Klammer um die ganze Bedingung setzen.
>
> if (value&0x80000000) == 0 sign=1; else sign=-1;
>

>
> Wenn Du ein biÃ?chen Rechenzeit sparen willst, kannst Du die Berechnung
> auch als Einzeiler schreiben:
>
>  test=(cast.longFloat(value&0x7FFFFF + 0x800000) / 0x800000) * math.pow(2,((value&0x7F800000)>>23) - 127);
>  if value<0 test=-test;
>

>
> Oder als Funktion:
>
> function bigendianToFloat(long value) returns float
> {float x;
>  x=(cast.longFloat(value&0x7FFFFF + 0x800000) / 0x800000) * math.pow(2,((value&0x7F800000)>>23) - 127);
>  if value<0 return -x; else return x;
> }
>

>
> MfG André H.
>


    Antwort schreiben


Antworten: