Für dieses Forum muß Javascript im Browser aktiviert werden!
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 Robbe, > > Die Lösung/Ursache ist ganze einfach zu erklären: > Alle Rechenoperationen werden Grundsätzlich in 16Bit ausgeführt, > außer es wird durch einen Variabeltyp oder einer Konstante ein > Anderer Typ vorgegenen (long/float). > > Das Problem bei Deinem Proggie liegt hier: > system.hour() * 3600 > Dies wird in einer 16Bit Operation ausgeführt: > 11*3600 ergibt hier -25936 (0x9AB0 bzw. 39600-65536=-25936) > Damit das Ergebnis korrekt ist, muß einer der beiden Multiplikatoren > vom Typ long sein. > Das passiert genau in Deiner Berechnung: > noww = system.day() * 86400 + system.hour() * 3600 + system.minute() * 60 + system.second(); > Datentyp: Integer long Integer Integer Integer Integer Integer > So rechnet hier die CC2:(übersichtlich dargestellt) > noww = 1* 86400 + 11* 3600 + 45* 60 + system.second(); > noww = 86400 + (-25936)+ 2700 + 0; > Datentyp: long Integer Integer Integer > noww = 60464 + 2700 + 0; > Datentyp: long Integer Integer > noww = 63164 + 0; > Datentyp: long Integer > noww = 63164; > Datentyp: long > Dies waren jetzt die gesamten Zwischenschritte. > > Dein Programm müsste so aussehen, damit die Berechnung korrekt läuft: > <font face="courier new" size=2>long noww; > string s; > thread main > { > lcdext.init(); > system.setdate(2003,8,1); > system.settime(11,45,0); > noww=system.hour(); > noww=system.day()*86400 + noww*3600 + system.minute()*60 + system.second(); > s = ""; > str.putlong(s,noww); > lcdext.print(s); > quit 1; > }</font> > > So wird bei der Berechung system.hour() * 3600 der Wert von system.hour() > gleich in einem long gespeichert und auch so behandelt. > > MfG André H. > > > > Hallo, > > Ich habe folgendes Problem: > > > > Bei einer Berechnung bekomme ich immer ein falsches Ergebnis raus. > > > > Hier mein Programm: > > > > <i>long noww; > > string s; > > > > thread main > > { > > lcdext.init(); > > system.setdate(2003,8,1); > > system.settime(11,45,0); > > noww = system.day() * 86400 + system.hour() * 3600 + system.minute() * 60 + system.second(); > > lcdext.clear(); > > s = ""; > > str.putlong(s,noww); > > lcdext.print(s); > > halt; > > } > > </i> > > > > Auf meinem Display steht immer 63164. Rechne ich das aber mit meinem Taschenrechner aus, kommt 128700 raus wie kann das sein ??? > > > > > > Kann mir jemand helfen?? > > > > Robbe.