Forum: Mikrocontroller und Digitale Elektronik 16Bit Zahl Vorzeichen umdrehen?


von Tubie (Gast)


Lesenswert?

Hallo,

ich stehe hier momentan etwas auf dem Schlauch und weis nicht so recht 
weiter.

Ich habe eine 16-Bit Zahl $8000-$FFFF (negativ), $0000-$7FFF (positiv). 
Diese möchte ich nun auf auf meinem LCD darstellen. Im Positiven Bereich 
auch kein Problem, den Negativen bereich erkenne ich durch MSB=1.

Wie muß ich jetzt rechnen, damit aus $FFFF wieder eine 1 wird und aus 
$8000 eine 32768.


Danke für eure Hilfe,
Tubie

von Johannes M. (johnny-m)


Lesenswert?

Bitkomplement der vorzeichenbehafteten Zahl bilden und 1 addieren...

z.B. 0xFFFF -> invertieren (Bitkomplement) gibt 0x0000, plus eins ist 
0x0001. Also 0xFFFF -> -1

von Gregor B. (gregor54321)


Lesenswert?

ist signed 0x8000 nicht "-0" und 0xffff "-32767"?
Vorzeichen umdrehen würde ich bei einer signed Zahl durch togglen des 
MSB. Wert bleibt gleich, nur das Vorzeichen ändert sich.

von Gast (Gast)


Lesenswert?

Der Johannes hat schon recht. So ist es richtig.
Negative Zahlen werden im 2-er Komplement dargestellt.

Siehe
http://de.wikipedia.org/wiki/Zweierkomplement

von Johannes M. (johnny-m)


Lesenswert?

Gregor B. wrote:
> ist signed 0x8000 nicht "-0" und 0xffff "-32767"?
> Vorzeichen umdrehen würde ich bei einer signed Zahl durch togglen des
> MSB. Wert bleibt gleich, nur das Vorzeichen ändert sich.
Nein. Schon mal was von Zweierkomplement gehört? Wenn nicht, dann google 
mal danach oder schau bei Wikipedia. 0xFFFF ist -1 und 0x8000 ist 
-32768! "-0" gibt es nicht, würde auch keinen Sinn machen, zweimal die 
Null in einem Wertebereich zu haben...

von Johannes M. (johnny-m)


Lesenswert?

BTW:
Falls es nicht klar sein sollte: Wenn man von der Zahl Null (also 
0x0000) eine Eins abzieht, dann gibts einen Underrun und es kommt 0xFFFF 
raus. Dementsprechend muss die "-1" in der Darstellung dem Wert 0xFFFF 
entsprechen, damit man überhaupt damit rechnen kann. Und das ist ja der 
Witz an der Zweierkomplement-Darstellung...

von crazy horse (Gast)


Lesenswert?

falls du das Speichermonster (zuminderst für kleinere MCs) (s)printf() 
benutzt - mit dem Parameter %d erledigt die Vorzeichenbehandlung.

von Tubie (Gast)


Lesenswert?

WOW! das ging ja wirklich fix!

Vielen Dank für die Antwort. Ist ja wirklich ne ganz einfache Sache...


Gruß,
Tubie

von Tubie (Gast)


Lesenswert?

@crazy horse

Ich programmiere ASM - C habe ich leider nie gelernt :(

Gruß,
Tubie

von Willi (Gast)


Lesenswert?

Warum werden neg. Zahlen gern im 2-er Komplement dargestellt ?
Weil dann die normale binäre Addition bzw. Subtraktion
mit positiven, negativen und "gemischten" Zahlen funktioniert.
Das Vorzeichen muss dann nicht besonders beachtet werden.

MfG Willi

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.