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

Re: Bug ?! Kategorie: Programmierung (von Thomas - 14.12.2004 14:36)
Als Antwort auf Re: Bug ?! von Jörg - 13.12.2004 10:05
Ich nutze:
C-Control II Unit, CC2-Application-Board, eigenes Board, OSOPT V3.0
Hallo zusammen,

ein ähnliches Problem hatte ich auch.

Der Compiler scheint Zahlen, die in einen Integer passen immer als Integer zu betrachten ohne dabei
den Typen des Lvalue für einen Cast zu beachten.


long x;
x = 1 shl 17; // funktioniert nicht

long eins;
eins = 1;
x = eins shl 17; // funktioniert


Beste Grü�e
Thomas



> Wie beschrieben:
>
> tempvar = (getchar(faktor, 8) - 48);
> tempvar = tempvar * 10000;
>
> geht ja;
>
> tempvar = 10000 * (getchar(faktor, 8) - 48);
>
> geht nicht, also nimm ich die Variante die geht ;-)
>
> Gruss Jörg
>
> > Hallo Jörg,
> >
> > was meinst Du mit "naja, läuft ja jetzt!"
> >
> > Hast Du den Variablentyp geändert oder eine andere Lösung gefunden?
> >
> > GruÃ? Hansi
> >
> > > Das kann's nicht sein. 9 * 100.000, 4 * 1.000.000 ... klappt ja!
> > > Wird wohl schon irgendwo ein Bug sein. Naja, läuft ja jetzt.
> > >
> > > Thanx für deine Zeit Hansi
> > >
> > >
> > > >
> > > > Hallo Jörg,
> > > >
> > > > ja ist schon komisch, aber Du hast geschrieben bei Werten bis 3 funktioniert es, dann nicht mehr.
> > > > Eine Integer-Variable kann 3*10.000 noch aufnehmen, bei 4*10.000 brauchst Du halt den Typ Long.
> > > >
> > > > Bye Hansi   ...einfach ausprobieren
> > > >
> > > > > Hi Hansi.
> > > > >
> > > > > Hat natürlich was der Ansatz mit Byte und Long Variablen.
> > > > > Ist bestimmt sicherer erst mit: tempvar = (getchar(faktor, 8) - 48);
> > > > >
> > > > > (ev. besser noch:
> > > > > tempbyte = (getchar(faktor, 8) - 48);
> > > > > tempvar = tempbyte; und weiterrechnen)
> > > > >
> > > > > die Typ-Konvertierung durchzuführen und dann zu rechnen.
> > > > >
> > > > > Unlogisch ist dabei eigentlich nur der Effekt, dass es 7x klappt und 1x nur bei Byte-Wert 48 - 51.
> > > > >
> > > > > Jörg
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > > Hallo Jörg,
> > > > > >
> > > > > > die Funktion getchart() liefert Dir Integer / Byte zurück und Deine Berechnungen nutzen
> > > > > > den Typ long.
> > > > > >
> > > > > > Ã?bergebe vor Deinen Berechnungen den Wert von getchar() an eine long-Variable und
> > > > > > rechne damit weiter oder la� von getchar() ein Typ long zurück geben, dann sollte es
> > > > > > klappen.
> > > > > >
> > > > > > GruÃ? Hansi
> > > > > >  
> > > > > >
> > > > > > > Effekte, welche 5h Fehlersuche zur Folge haben:
> > > > > > >
> > > > > > > --------------------------------------------------------------------------
> > > > > > >
> > > > > > > function getchar(byte s[], int position) returns byte
> > > > > > > {
> > > > > > >  return s[position];
> > > > > > > }
> > > > > > >
> > > > > > > function para3(long kafaktor) returns long
> > > > > > > {
> > > > > > >  string faktor;
> > > > > > >  long tempvar;
> > > > > > >
> > > > > > >  faktor = "K-Fa:00000000";
> > > > > > >
> > > > > > > // ... Benutzereingabe des K-Faktors
> > > > > > >
> > > > > > >  kafaktor = 10000000 * (getchar(faktor, 5) - 48);
> > > > > > >  tempvar = 1000000 * (getchar(faktor, 6) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  tempvar = 100000 * (getchar(faktor, 7) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  
> > > > > > >  tempvar = (getchar(faktor, 8) - 48);
> > > > > > >  tempvar = tempvar * 10000;
> > > > > > > // funktioniert immer
> > > > > > >
> > > > > > > // tempvar = 10000 * (getchar(faktor, 8) - 48);
> > > > > > > // funktioniert nicht, wenn (getchar(faktor, 8) - 48) einen Wert > 3 liefert
> > > > > > > // --- ??? ---
> > > > > > >
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  tempvar = 1000 * (getchar(faktor,9) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  tempvar = 100 * (getchar(faktor,10) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  tempvar = 10 * (getchar(faktor,11) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >  tempvar = (getchar(faktor,12) - 48);
> > > > > > >  kafaktor = kafaktor + tempvar;
> > > > > > >
> > > > > > >  return kafaktor;
> > > > > > > }
> > > > > > >
> > > > > > > -------------------------------------------------------------
> > > > > > >
> > > > > > > Jemand 'ne logische Erklärung dafür?
> > > > > > >
> > > > > > > Ein fast wahnsinnig gewordener
> > > > > > > Jörg


    Antwort schreiben


Antworten: