Forum: Mikrocontroller und Digitale Elektronik C18 Division funktioniert nicht


von Edi _. (edi_2k)


Lesenswert?

Hallo.

folgendes merkwürdiges Problem:

char a;
char b;

a = 9;
b = a * 3;   // ergebnis 3
b = a / 3;   // ergebnis 9

von Jörg X. (Gast)


Lesenswert?

Und was genau ist dein Problem ?
(Glaswürfelmodus -- Abwechslung muss sein ;) )
den ASCII wert gibt's z.B. mit b + '0'; (für genau eine Dezimalstelle)
(/(Glaswürfelmodus)
Außerdem wird dir ein optimierender Kompiler den Code etwas - nun ja 
"optimieren" bzw reduzieren.

(auch auf die Gefahr hin, Trolle zu füttern)

hth. Jörg
ps.: Fragen stellt man mit einem '?' ;-)

von Jörg X. (Gast)


Lesenswert?

Oh Entschuldigung, da  hab ich wirklich nicht richtig aufgepasst !

Woher hast du die Ergebnisse, die du angegeben hast? 
(Simulatior/Debugger/Serielle Ausgabe/Display/... )


sry Jörg

von hubert (Gast)


Lesenswert?


b = a * 3;   // ergebnis !!3!!
b = a / 3;   // ergebnis !!9!!


Bist du dir Sicher??

Heißt das nicht:

b = a * 3;   // ergebnis 27
b = a / 3;   // ergebnis 3

von Master S. (snowman)


Lesenswert?

bitte definiere, was du mit "ergebnis 3" meinst.

von Edi _. (edi_2k)


Lesenswert?

sorry.

hatte mich hier im forum vertippt.
also:

char a = 9;
char b;

version 1:
b = a*3;  // das ergebnis ist korrekterweise 27

version 2:
b = 9/3;  // das ergebnis ist korrekterweise 3
b = a/3;  // das ergebnis der rechnung ist 9, nicht 3!!

die ergebnisse habe ich verschiedenfach ausgegeben um das als 
fehlerquelle auszuschließen.

ich habe herausgefunden, dass sobald eine variable (egal ob char oder 
int; signed oder unsigned) im spiel ist (ob als dividend oder divisor), 
dann ist das ergebnis zwar reproduzierbar, jedoch völlig unplausibel.

gruß
edi

von xyz (Gast)


Lesenswert?

Schau doch mal an, was der generierte ASM-Code sagt.
Und bitte beantworte die oben gestellten Fragen.

von Edi _. (edi_2k)


Lesenswert?

hallo.

ein ASM-File wird vom C18-Compiler nicht generiert, nur ein HEX-File.
ich habe 2 verschiedene displays für die ausgabe. geben beide das 
gleiche aus. die optimierungen habe ich schon ausgeschalten, brachte 
aber auch nichts.

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
Noch kein Account? Hier anmelden.