mikrocontroller.net

Forum: Compiler & IDEs 32bit signed zu 4*8bit unsigend


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte gerne eine 32bit signed Variable auf 4 8bit unsigned 
Variablen aufteilen, dabei soll das Vorzeichen im höchstwertigen Byte so 
wie in der signed Variable auftauchen. Also das ganze Bitmuster soll 
erhalten bleiben!

Das ganze soll also so aussehen

32bit:   10000000 00000000 00000000 00000011      = -3

          1.byte   2.byte   3.byte   4.byte
8bit:    10000000 00000000 00000000 00000011
wert:       128       0        0        3


Wie lässt sich das sinnvoll realisieren?

Grüße aus Kassel,
Andreas

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: union


PS:
>10000000 00000000 00000000 00000011

ist nicht -3, sondern -2'147'483'645  !

(also drei vorm Überlauf)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So etwas lässt sich ganz einfach mit einer Union realisieren.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die 32bit Variable soll natürlich signed sein! Da verstehe ich nicht, 
warum sie 3 vorm Überlauf sein soll!

Das höchstwertige bit in einer signed Variable gibt doch das Vorzeiche 
an, oder habe ich da was falsch verstanden?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas wrote:
> die 32bit Variable soll natürlich signed sein! Da verstehe ich nicht,
> warum sie 3 vorm Überlauf sein soll!
>
> Das höchstwertige bit in einer signed Variable gibt doch das Vorzeiche
> an, oder habe ich da was falsch verstanden?

Negative Zahlen werden im 2-er Komplement dargestellt. 
http://de.wikipedia.org/wiki/Zweierkomplement

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das höchstwertige bit in einer signed Variable gibt doch das Vorzeiche
>an, oder habe ich da was falsch verstanden?

Korrekt. Ich sollte vielleicht besser "Unterlauf" sagen.


11111111 11111111 11111111 11111111  =>  -1
11111111 11111111 11111111 11111110  =>  -2
...
10000000 00000000 00000000 00000011  =>  -2'147'483'645
10000000 00000000 00000000 00000010  =>  -2'147'483'646
10000000 00000000 00000000 00000001  =>  -2'147'483'647
10000000 00000000 00000000 00000000  =>  -2'147'483'648

00000000 00000000 00000000 00000000  =>   0

00000000 00000000 00000000 00000001  =>  +1
...
01111111 11111111 11111111 11111111  =>  +2'147'483'647

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke, da wusste ich nur die Hälfte, kein Wunder das bei mir nichts 
funktioniert hat! Vielen Dank an euch!

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.