www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MPLab Simulation von signed integer


Autor: andres morten (mortenalta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

im Rahmen eines kleinen Uni-Projektes möchte ich in C-Programm mit MPLab 
und dem CCS C-Compiler schreiben (soweit getan).

Dabei muss ich u.a. den typ "signed int16" verwenden.

Codzeile:
signed int16 variable1 = 0;
int8 variable2 = 180;

variable1 = 0-variable2

Sprich in der variable1 müssten dann -180 drin sein.
Wenn ich das in der Simulation probiere, und die dementsprechenden 
Variablen in im "watch" fenster beobachte steht in variable1 nicht -180 
drin, sondern 76.
(0 - 180 = 76 für eine UNsigned variable - aber sie ist definitiv 
signed) Wo ist also mein Fehler? Kann evtl. die simulation keine 
negativen werte anzeigen - glaub ich nicht... irgendwo muss ich einen 
(denk-)Fehler haben.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wo ist also mein Fehler?

Es gibt kein 180 bei int8.

Autor: andres morten (mortenalta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte?

Bei int8 gibt es 180? (!).

Bitte um ein paar Sätze mehr :)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei int8 gibt es 180? (!).

>Bitte um ein paar Sätze mehr :)

Wozu? Schnapp dir dein C Buch.
Unter Datentypen findest du die Grenzen die
du beachten musst.

Autor: andres morten (mortenalta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja, mein Buch, sowie die Hilfe des CCS compilers sagt dass int8 von 
0-255 geht, solange sie unsigned - also nur positiv ist. Selbst wenn ich 
"unsigned" davor schreibe, trägt sie den wert 180, klar...dann ja erst 
recht.

Das ist auch eigentlich nicht dass problem, denn in der simulation 
trägt:

variable1 den wert 180 (bei int8).

das problem liegt ja bei:

variable2 = 0 - variable1 ;

in datentypen:

signed int16 = 0 - int8
signed int16 = 0 - 180


Ich habe es jetzt so probiert (auch wenn es für mich unlogisch ist dass 
es vorher nicht funktioniert hat)

signed int16 = 0 - unsigned int16
signed int16 = 0 - 180
NUN trägt sie wirklich den wert "-180".


Ich denke einfach dass wenn ich von 0 einen int8 wert abziehe, kommt ein 
int8 wert raus, AUCH wenn die zielvariable int16 ist... naja... so halb 
macht es sinn...

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.