Hallo! Ich bin am Verzweifeln, ist ja irgendjemand in der Lage mir klar zu machen, wieso für CodeVision diese 2 Varianten nicht gleichwertig sind? 1) summa = (Temp_Stop-temperature)*(KP+KI); 2) summa = (Temp_Stop-temperature); summa = summa*(KP+KI); bei dem ersten kriege ich 0, bei dem zweiten - was es sein soll. summa - unsigned int; temperature - unsigned char; Temp_Stop=100>temperature; KP=32, KI=32;
Wird summa nicht irgendwie overflowed? Was anderes sehe ich nicht...
Hi, kann es sein, dass Temp_Stop/KP/KI Literale oder unsigned char Konstanten sind? Dann gibt es denke ich einen Unterschied: Bei der ersten Variante würde der Compiler dann evtl. die komplette Rechnung mit unsigned char durchführen und somit kommt ein falsches Ergebnis raus, da überläufe auftreten. Bei der zweiten Variante lässt sich der erste Teil der Rechnung unsigned char durchführen (solange 0<=temperature<=100) dann casted der Compiler automatisch auf unsigned int. Die Zweite Rechnung führt er dann unsigned int durch und es kommt das richtige raus. Bei solchen Rechnungen mit Variablen unterschiedlicher Typen ist es immer sehr wichtig richtig zu casten! Damit lassen sich viele Fehler vermeiden. Viele Grüße, Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.