2-Komplement Binäzahl

Gast #228102
Lesenswert?
• ▲
▼
Hallo ich habe eine Frage, wie kann ich aus einer 8 Bit Zahl eine 8 Bit
2-Komplementzahl die von -127 bis + 128 zählt. Das Höchstwertige Bit
bestimmt dabei das Vorzeichen.
z.B.

 2 0 0000010
 1 0 0000001
 0 0 0000000
------------
-1 1 1111111
-2 1 1111110
usw...

Im Moment versuche ich mit

data = (((data<<1)/(1<<1))+127);

die Zahl darzustellen, allerdings bricht er jedes mal wenn er ins
negative gehen soll um und geht ins positive. Ich hoffe jemand hat ne
Idee und kann mir weiter helfen.
MfG Paul
Gast #228105
Lesenswert?
• ▲
▼
Du mußt gar nichts machen, die CPU rechnet ja selber im 2-er
Komplement.

Es hängt also nur vom Typ ab (signed oder unsigned), ob 0xFF als -1
oder +255 angesehen wird:

unsigned char i = 255;
signed char j;
signed int k;

j = i; // nun ist j = -1

k = i; // k = 255, da 255 auch in 16 Bit als signed paßt.

k = (signed char)i; // k = -1, da vor der 16 Bit Erweiterung der Typ
geändert (gecastet) wurde.
Ein Typ-cast macht keinerlei Konvertierung !


Peter
Gast #228108
Lesenswert?
• ▲
▼
aus               soll

128 0 0111111 |      255  11111111
...
 2   00000010 |      130
 1   00000001 |      129
 0   00000000 |      128  10000000
------------- |
-1   11111111 |      127  01111111
-2   11111110 |      126
...
-127 10000000 |        0  00000000

                             usw. werden.
Gast #228113
Lesenswert?
• ▲
▼
Das hab ich gemach, das funktioniert leider nicht. in de Simulation
funktioniert das, aber der DA Wandler kann das Ursprungssignal nicht
wieder herstellen. Der Gibt bei jedem 0 Durchgang einen Flankenwechsel
aus.
Gast #228114
Lesenswert?
• ▲
▼
Dann stimmt irgendwas an den Codes nicht.


Deine Codetabelle stimmt sowieso nicht.

signed char läuft nicht von -127 ... +128 sondern von -128 ... +127

Und ne gerade Zahl mit gesetztem 0-Bit und umgekehrt, geht gar nichtr.


Signed Binär geht so:

-128: 10000000
-127: 10000001
...
-1:   11111111
0:    00000000
+1:   00000001
...
+127: 01111111


Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.