Hallo. folgendes merkwürdiges Problem: char a; char b; a = 9; b = a * 3; // ergebnis 3 b = a / 3; // ergebnis 9
Gast
#592492
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 '?' ;-)
Gast
#592495
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
Gast
#592497
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
bitte definiere, was du mit "ergebnis 3" meinst.
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
Gast
#592658
Schau doch mal an, was der generierte ASM-Code sagt. Und bitte beantworte die oben gestellten Fragen.
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.