Forum: Mikrocontroller und Digitale Elektronik negative Dezimalzahl in Binär


von Taw U. (tawo20)


Lesenswert?

Wie wandelt man eine negative Dezimalzahl in eine Binärzahl um ?

Also bei postiven Zahlen sieht es ja so aus
Bsp.:
Zahl 42

42/2=21 Rest 0
21/2=10 Rest 1
10/2=5   Rest 0      Binärzahl: 1 0 1 0 1 0
 5/2=2   Rest 1
 2/2=1   Rest 0
 1/2=0   Rest 1


Wie würde die Binärzahl bei -42 aussehen ?

von HildeK (Gast)


Lesenswert?


von GeraldB (Gast)


Lesenswert?

Mit dem 2er-Komplement.

1. Schritt : Alle Stellen invertieren
2. Schritt : 1 addieren

Binärzahl : 00101010 (42)

Invertiert: 11010101
1 addieren:        1
            --------
Ergebnis  : 11010110 (-42)


Wichtig: Das linke Bit ist immer das Vorzeichen und hat keinen 
Stellenwert.

von HildeK (Gast)


Lesenswert?

GeraldB schrieb:
> Wichtig: Das linke Bit ist immer das Vorzeichen und hat keinen
> Stellenwert.

... oder den Stellenwert -128, siehe mein Link zu Wikipedia.

von rbx (Gast)


Lesenswert?

https://de.wikipedia.org/wiki/Zweierkomplement

man könnte die binäre 42 Umwandeln in ihre "negative" Entsprechung im 
Zweierkomplement.

Sämtliche Stellen werden umgekehrt, bzw. negiert und dann noch eine 1 
draufaddiert.

Das wäre dann erstmal - ausgehend von dem Binärformat 8-Bit

00101010

11010101

bzw. nach +1

11010110

von c-hater (Gast)


Lesenswert?

HildeK schrieb:
> GeraldB schrieb:
>> Wichtig: Das linke Bit ist immer das Vorzeichen und hat keinen
>> Stellenwert.
>
> ... oder den Stellenwert -128, siehe mein Link zu Wikipedia.

Nicht oder (im üblichen Sprachgebrauch), sondern Exclusiv-Oder.

Entweder repräsentiert es das Vorzeichen oder (alternativ-oder!) den 
Stellenwert 2^7=128.

Das erste ist der Fall, wenn der Ausgangswert negativ ist, das zweite 
ist der Fall, nachdem man den negativen Ausgangswert in die nicht 
vorzeichenbehaftete Darstellung umgewandelt hat. Lustigerweise passiert 
im Fall von -128 nämlich in der binären Repräsentation dabei rein 
garnix, die ist vor und nach der Wandlung gleichermaßen 0b10000000.

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> ... oder den Stellenwert -128, siehe mein Link zu Wikipedia.

Das kommt drauf an, ob es sich um eine 8Bit Zahl handelt oder nicht. Bei 
einer 16Bit Zahl hätte das linke Bit alternativ eher den Wert 
-1*2^(16-1) ;-)

von rbx (Gast)


Lesenswert?

man könnte es etwas entschärfter formulieren, bei hexadezimalzahlen, 
falls sie ein Vorzeichen bekommen/ negativ sind haben die mindestens 
eine 8 vorne (8-f).
Mit Vorzeichen in den negativen Bereich shiften, ist auch sehr 
interessant, sollte man sich, falls noch nicht gesehen, unbedingt mal 
irgendwo ansehen.
Die hexadezimalen Entsprechungen der beiden Zahlenausdrücke oben sind
2A und D6.

von Dirk B. (dirkb2)


Lesenswert?

rbx schrieb:
> Mit Vorzeichen in den negativen Bereich shiften, ist auch sehr
> interessant, sollte man sich,

Man kann logisch (dann kommt eine 0 rein) oder arithmetisch (dann wird 
das Vorzeichenbit genommen) nach rechts schieben.

Im C-Standard ist nicht definiert was genommen wird , auch wenn man 
meint, das hängt von signed/unsigned Typen ab. Kann es, muss es aber 
nicht.

von foobar (Gast)


Lesenswert?

> Wie wandelt man eine negative Dezimalzahl in eine Binärzahl um ?

Indem man den Betrag von 0 abzieht und nach der gewünschten Anzahl 
Stellen abbricht:
1
  00000000
2
- 00101010
3
  --------
4
  11010110

(Ergibt das 2er-Komplement, 0-x  <=> ~x+1 (mod 2^N))

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.