Achtung: Dies ist eine historische Web-Site. Aktuell ist https://rainer.gerhards.net/ (engl) bzw https://www.rainer-gerhards.de/ (deutsch). Alle dynamischen Funktionen, Formulare etc auf dieser Seite sind abgeschaltet.
Datenschutzerklärung Impressum

 
01.08.2017, 22:48 Uhr
Hauptmenü
|--> Infos
|--> Forum
|--> Fotos


Sprachwahl
Sprache auswählen:




Online
Aktuell 1 Gast und 0 registrierte Benutzer online.

Anmeldung

Anmeldung




 





Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
rgerhards
Titel: Bedeutung des Vorzeichenbits in Zweierkomplementdarstellung  BeitragVerfasst am: 11.12.2009, 09:58 Uhr



Anmeldung: 25. Sep 2006
Beiträge: 688

Ich versuche es einmal zu skizzieren: Sei [a_{(n-1)}, ..., a_0] die n-stellige Zweierkomplementdarstellung einer Ganzzahl. Dann ist a_{(n-1)} das "Vorzeichenbit". Das Bit kodiert aber nicht nur das Vorzeichen, sondern kann auch als Wert 2^{(n-1)} betrachtet werden. Das macht man auch so. Der Wert einer Zahl in Zweierkomplementdarstellung ist dann:


-2^{(n-1)} \cdot a_{(n-1)} + \sum_{i = 0}^{n-1} (2^i  \cdot a_i)

oder, in Prosa: Du bildest die Summe über alle Bits ausser dem höchstwertigen und subtrahierst dann den Wert des höchstwertigen Bits von dieser Summe. Das Ergebnis ist dann der darzustellende Wert.

Nehmen wir nun an, du möchtest die n-stellige Darstellung in eine (n+1)-stellige erweitern. Ist der Wert positiv, so kannst ist der Wert der höchstwertigen Stelle 0 [0 * 2^{(n-1)}], der Wert wird somit vollkommen durch das Summenzeichen bestimmt. Du musst also eine 0 an der (n+1)-ten Stelle einfügen. Das ist meist einsichtig, weil es auch unserer gewohnten Schreibweise im Dezimalsystem entspricht.

Ist der Wert jedoch negativ, so ist das n-te Bit gleich 1, es geht also mit "negativem Wert" in die Berechnung ein. Nach Definition des Zweierkomplements muss bei einer Ausweitung um 1 Bit aber auch das neue höchstwertige Bit gleich 1 sein. Dieses hat nun aber den Wert 2^n und der ist somit genau doppelt so hoch wie der vorherige. Das muss korrigiert werden. Wie geht das am einfachsten? Beachte, dass das vorherige höchstwertige (n-1)-te Bit nun zum "Summenzeichen gehört". Wenn ich dieses Bit auf 1 lasse, dann wird von 2^n gerade 2^{(n-1)} und damit die "überzählige Hälfte" abgezogen. Beispiel: -128 ist 80 hex, nämlich 2^7 - 0. Wird das nun auf 9 Bit ausgeweitet, so lautet der Wert 180 hex = -2^8+2^7 = -256 + 128 = -128.

Diese Ausweitung kannst Du nun beliebig fortsetzen, bei 16 Bit wäre das dann FF80 hex (rechne es im Zweifel mal durch).

In der Anwendung ist es ganz einfach: man muss einfach das oberste Bit expandieren. Also FC hex => oberstes Bit = 1, somit 16 Bit = FFFC hex. Oder 47 hex => oberstes Bit 0, somit 0047hex mit 16 Bit. Das ganze nennt man dann anschaulich "Sign Extension".
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
Beiträge vom vorherigen Thema anzeigen:     
Gehe zu:  
Alle Zeiten sind GMT + 1 Stunde
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
PNphpBB2 © 2003-2007 
:: RSS Feed: ::
Page created in 0.133765935898 seconds.

Ferientips - das Urlaubsweb - Jan Gerhards - Ulrike Gerhards - Ulrike Gerhards Foto Site