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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo André > > Danke für die rasche Antwort. > > Na ja, ich kann&#39;s wohl nachvollziehen, grosse Freude kommt aber > trotzdem nicht auf ;-) > > Ich merke einfach immer mehr, dass ich in einer andern (Software-) Welt bin. > > Bisher habe ich meist mit einer sehr robusten Programmiersprache (Ada) > gearbeitet, welche den Programmierer bereits bei der Compilation auf > möglichst viele Fehler hinweist. > > In meinem Besipiel würde das bedeuten, dass wenn ich einen long-Wert erwarte, > der Compiler nicht einfach frisch und froh einen Integer-Operation ausführt > sondern mich zumindest darauf hinweist, dass ich > - entweder als Resultat auch einen int-Wert vorsehen muss > - oder auf einem der Operanden bzw. der Operation selbst ein "type cast" > nach "long" ausführen muss. > > Aber ich weiss schon, C2 (wie auch C) ist da sehr viel "flexibler", indem > irgendwie irgendwas "zusammen-operiert" wird und dann als irgendetwas > anderes zurückkommt. > // Etwas böse ausgedrückt... > > Na ja, auf jeden Fall vielen Dank für Deine Erklärung. > > Nebenbei: Wie würdest Du mein Problem elegant lösen? > - Kann man bei einer const-Definition den Datentyp (z.B. long) erzwingen? > - Gibt es ein Type Casting in C2 oder muss ich eine Funktion schreiben a là > function to_long(int i) returns long { > long l; > l = i; > return l; > }; > - Oder sonst eine Idee? > > Gruss & Happy New Year > Reto > > > &gt; Hallo Reto, > &gt; > &gt; Das ist kein Bug, sondern normal und logisch. :-) > &gt; (Wenn man weiß wie eine Berechnung bei der CC2 funzt) > &gt; > &gt; Wenn Du zwei Integerwerte miteinander multiplizierst, kommt auch wieder > &gt; ein Integerwert raus. > &gt; Kurz : > &gt; <b&gt;Integer</b&gt; mal <b&gt;Integer</b&gt; ergibt wieder einen <b&gt;Integer</b&gt; > &gt; Ist ein Longwert in der Berechnung, kommt auch wieder Long heraus, > &gt; genauso ist es bei float. > &gt; Bsp: > &gt; <b&gt;long</b&gt; mal <b&gt;int</b&gt; ergibt <b&gt;long</b&gt; > &gt; <b&gt;float</b&gt; mal <b&gt;int</b&gt; ergibt <b&gt;float</b&gt; > &gt; Das ganze gilt natürlich nicht nur für Muliplikation, sondern auch für alle > &gt; anderen Operatoren. > &gt; > &gt; Willst Du also einen Float-Wert bei der Berechnug von zwei nicht floats > &gt; erhalten, so mußt du vorher mindestens einen Wert vorher in einer Float-Var > &gt; speichern: > &gt; > &gt; <font face="Courier New" size=2&gt;float f; > &gt; int i,j; > &gt; > &gt; f=i; > &gt; f=f*j > &gt; > &gt; Oder nur mit Long: > &gt; > &gt; long l; > &gt; int i,j; > &gt; > &gt; l=i; > &gt; l=l*j > &gt; </font&gt; > &gt; > &gt; Das hat hoffentlich etwas Licht ins Dunkle gebracht. :-) > &gt; > &gt; MfG André H. > &gt; > &gt; > &gt; &gt; Beim Rechnen mit verschiedenen Integer-Formaten im Zusammenhang mit > &gt; &gt; einem Date/Time Modul habe ich folgenden Bug(?) entdeckt: > &gt; &gt; > &gt; &gt; Example: > &gt; &gt; > &gt; &gt; const SECONDS_PER_HOUR = 3600; > &gt; &gt; long seconds_per_hour; > &gt; &gt; int h; > &gt; &gt; long l; > &gt; &gt; > &gt; &gt; // Init > &gt; &gt; seconds_per_hour = SECONDS_PER_HOUR; > &gt; &gt; h = 24; > &gt; &gt; > &gt; &gt; // 3 different ways of the same "long" operation > &gt; &gt; // > &gt; &gt; l = SECONDS_PER_HOUR * 24; // case 1: correct, l = 86400 > &gt; &gt; l = seconds_per_hour * h; // case 2: correct, l = 86400 > &gt; &gt; > &gt; &gt; // but... > &gt; &gt; l = SECONDS_PER_HOUR * h; // case 3: <b&gt;ERROR l = 20864</b&gt; > &gt; &gt; > &gt; &gt; <b&gt;Bemerkung:</b&gt; > &gt; &gt; Es scheint, dass die long-Arithmetik im Fall 3 fehl schlägt. Anstatt eine long-Operation > &gt; &gt; auszuführen, wird vermutlich eine int-Operation gemacht und anschliessend ein long-Wert > &gt; &gt; zurückgegeben. > &gt; &gt; > &gt; &gt; Komischerweise funktioniert&#39;s, wenn die beiden Operanden (SECONDS_PER_HOUR, 24) vom Typ > &gt; &gt; int (oder einer sogar byte?) sind (Fall 1). > &gt; &gt; > &gt; &gt; Es funktioniert einigermassen logischerweise auch (Fall 2), wenn die eine "Konstante" > &gt; &gt; zuerst einer long-Variable zugewiesen wird. > &gt; &gt; > &gt; &gt; > &gt; &gt; <b&gt;Fragen:</b&gt; > &gt; &gt; - Weiss jemand eine Erklärung oder findet das Verhalten gar logisch? > &gt; &gt; - Muss bei long-Operationen wirklich immer explizites "type casting" angewendet > &gt; &gt; werden (das ja eigentlich nicht einmal in C2 enthalten ist)? > &gt; &gt; > &gt; &gt; Danke für Eure Unterstützung > &gt; &gt; Reto
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB