Re: Das ist kein Bug Kategorie: Programmierung (von Olaf - 21.03.2004 9:50) | ||
Als Antwort auf Das ist kein Bug von André H. - 15.03.2004 22:45 | ||
| ||
Hallo Andre, > 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 !? :-) da C2 ja eine getypte Sprache ist könnte der Compiler auch mal auf die linke Seite schauen, wie es "richtige" Programmiersprachen, wie z.B. Java tun. Folgendes Java Programm import java.io.*; public class test { public static void main(String args[]) { byte i; int e; i = 16; e = 1 << i; System.out.println(Integer.toBinaryString(e)); } } ergibt erwartungsgemä� [c:dev]java test 10000000000000000 insofern ist Bug vielleicht der falsche Begriff, unerwartetes Verhalten und vor allem nicht konsistentes Verhalten (s.u.) trifft es wohl eher. Zugegebenerma�en hat die Entwicklung der Java Programmiersprache JavaSoft bzw. Sun auch bestimmt ein bisschen mehr Geld gekostet als C2 den Leuten von Conrad. > Schlie�lich ist des C164CI ein 16Bit.-Controller und kein 32Bit. :-) das ist ein Implementationsdetail und sollte eine "Virtuelle" Maschine nicht beeindrucken, deswegen hei�t Sie ja auch so. ... > 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. Das stimmt so nicht ganz denn folgendes passiert long vlong, long1, vlong16; int vInt; vlong1 = 1; vInt16 = 16; vlong16 = 16; 1.) vlong = 1 shl 16; funktioniert im Simulator, ccontrol habe ich nicht getestet. 2.) vlong = 1 shl vInt16; funktioniert NICHT im Simulator und NICHT in der CCONTROL 3.) vlong = 1 shl vLong16; funktioniert im Simulator aber NICHT in der CCONTROL 4.) vlong = vlong1 shl vInt16; funktioniert im Simulator und in der CCONTROL Wenn deine Aussage oben richtig wäre würde Fall 1.) mit reinen Konstantenausdrücken nicht und Fall 3.) funktionieren. Im Fall 3.) passiert aber etwas wirklich unschönes, nämlich dass es im Simulator läuft in der echten CControl aber nicht. Wahrscheinlich ist der "shift" Operator hier ein Sonderfall, da dieser den Typ des rechten Operanten nur bedingt in die Berechnung einbezieht... Also meine Warnung an alle Programmierer erhalte ich aufrecht und denke das dieses ein zumindest nicht korrektes Verhalten darstellt. Olaf | ||
Antwort schreiben Antworten: 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) |