Forum: Mikrocontroller und Digitale Elektronik MPLab Simulation von signed integer


von andres m. (mortenalta)


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:
1
signed int16 variable1 = 0;
2
int8 variable2 = 180;
3
4
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.

von holger (Gast)


Lesenswert?

>Wo ist also mein Fehler?

Es gibt kein 180 bei int8.

von andres m. (mortenalta)


Lesenswert?

Bitte?

Bei int8 gibt es 180? (!).

Bitte um ein paar Sätze mehr :)

von holger (Gast)


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.

von andres m. (mortenalta)


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...

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.