www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Rechenproblem mit vorzeichenbehafteten Variablen


Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgendes Problem:

GCC-Compiler mit Mega32
char varA;
int varB;

...

varA = -10;

if(varA < 0)varB = 1;

Leider erkennt der Compiler "<0" nicht - warum?

Damit gehts gleich weiter:
varA = -10;
varB = 100;

varB = varB + varA;

Das Ergebnis lautet 346 in varB. Es ist so, als ob er die char Variable 
stur nach den Bits und nicht nach dem Wert beurteilt.
Was mache ich falsch? Muss ich noch eine entsprechende Bibliothek 
einbinden?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ein char einen Wertebereich von 0..255 hat, steht nach der Operation
char varA = -10;

varA = (256) -10 = 246.

Den Rest kannst du dir selbst beantworten.

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich habe doch "char" und nicht "unsigned char"

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann wird der Compiler automatisch ein unsigned-char draus machen.

Weil mit meiner Erklärung erklärt ja alles.

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Studio erkennt im Simulationsmodus, dass varA = -10 ist.
Die anschließende Rechenoperation funktioniert dann aber doch nicht 
ordnungsgemäß.

Jemand noch ne Idee?


edit: Ich habe die variablen jetzt explizit mit "signed char" und 
"signed int" deklariert. So funktioniert es. Ich war vorher der Annahme, 
dass Variablen generell als signed deklariert werden, wenn man nicht 
"unsigend" davor schreibt. Naja.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.