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

Das ist kein Bug Kategorie: Programmierung (von André H. - 15.03.2004 22:45)
Als Antwort auf Bug in der VM bei shl von Olaf - 15.03.2004 21:35
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Olaf,

> als Warnung an alle c2 Programmierer. Ich habe einen Bug in der VM beim
> linksschiebe-Operator "shl" entdeckt .
>
> Wird als rechter operand eine Variable angegeben die von einem kürzeren Typ ist,
> so ist das Ergebnis nicht korrekt.

Das ist kein Bug. (siehe auch FAQ: Berechnungen mit long)
Woher soll denn die VM wissen, daÃ? das Ergebnis long sein soll, wenn mit
zwei Integerwerten gerechnet wird !? :-)
SchlieÃ?lich ist des C164CI ein 16Bit.-Controller und kein 32Bit. :-)

l = 1 shl i;
"1" ist hier ein Integerwert 16Bit
i ist zwar ein Byte, wird also auch als Integerwert gezählt.
Also besteht logischerweise für die VM kein Grund dies in Long-werte zu "wandeln",
egal welcher Variable das Ergebis zugeordnet wird.
Denn es passiert hier folgendes:

-Lade "1" auf den Stack
-Lade den Inhalt von "i" auf den Stack
-Führe SHL aus und Lade das (Integer !!)Ergebnis auf den Stack
-Speichere den Stackinhalt in "l"

Kurz: Wenn beide Operatoren einer Berechnung Integer sind, ist das Ergenis auch Integer.
Wenn mind. einer der beiden Operatoren vom Typ Long ist, ist das Ergebnis auch Long.
(Hier werden erweiterte Routinen für Long ausgeführt.)
Dasselbe gilt auch für float.

So funzt Dein Bsp.:
thread main
{long l,x;
 byte i;

 x=1;
 for i=0 ... 32
 {
  l = x shl i;
 }
}



> Wei�t jemand ob es für diesen Bug einen fix gibt ?

Wie gesagt, das ist kein Bug, also gibt es auch keinen Fix.
(Mehr siehe in den FAQ > Berechnungen)

MfG André H.

PS: Bitte benutze die code-Tags, wenn Du Quellcode postest. Dann lässt sich
      dieser - bei umfangreicheren Code - leichter lesen.


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Das ist kein Bug (von Olaf - 21.03.2004 9:50)
    Re: Das ist kein Bug (von Dietmar Weickert - 22.03.2004 13:51)
    Re: Das ist kein Bug (von André H. - 21.03.2004 12:56)