Hallo, ich habe ein kleines Problem mit meinem AVR Studio 4 ich lese 2 ADCs ein und will diese multiplizieren dafür speichere ich sie zuerst in einer int-Variablen und multipliezie sie dann und speichere das Ergebnis in einer unsigned long variable leider gibt der Compiler mir als Ergebnis immer 0 oder 64512 zurück obwohl der Größtmöglichste wert 1024*1024 ist. Hat einer von euch eine Ahnung woran das liegt? Gruß Sascha
Sascha G. wrote: > ich habe ein kleines Problem mit meinem AVR Studio 4 ich lese 2 ADCs ein > und will diese multiplizieren dafür speichere ich sie zuerst in einer > int-Variablen und multipliezie sie dann und speichere das Ergebnis in > einer unsigned long variable leider gibt der Compiler mir als Ergebnis > immer 0 oder 64512 zurück obwohl der Größtmöglichste wert 1024*1024 > ist. Hat einer von euch eine Ahnung woran das liegt? Poste mal den Code. Eventuell musst du da mal casten.
Hallo, Ja, das Problem liegt an dem Menschen der vor dem AVR Studio 4 sitzt :-) poste deinen Sourcecode Gruß aus dem Odenwald
Das Ergebnis einer int-Multiplikation ist auf 32767 (bzw. 65535 bei unsigned int) beschränkt. Du musst mindestens einen der beiden Faktoren nach long (oder unsigned long) casten, damit die Multiplikation ebenfalls als long ausgeführt wird. Also bspw. so:
1 | int adcwert1, adcwert2; |
2 | long ergebnis; |
3 | |
4 | ergebnis = (long)adcwert1 * adcwert2; |
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.