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


von Andreas (Gast)


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

von Matthias L. (Gast)


Lesenswert?

Stichwort: union


PS:
>10000000 00000000 00000000 00000011

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

(also drei vorm Überlauf)

von Gast (Gast)


Lesenswert?

So etwas lässt sich ganz einfach mit einer Union realisieren.

von Andreas (Gast)


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?

von Christian R. (supachris)


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

von Matthias L. (Gast)


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

von Andreas (Gast)


Lesenswert?

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

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.