mikrocontroller.net

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


Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitkomplement der vorzeichenbehafteten Zahl bilden und 1 addieren...

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

Autor: Gregor B. (gregor54321)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: crazy horse (Gast)
Datum:

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

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WOW! das ging ja wirklich fix!

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


Gruß,
Tubie

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse

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

Gruß,
Tubie

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.