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

 
Aug 01, 2017 - 06:46 PM


Select language
Preferred language:


Online
There are 1 unlogged user and 0 registered users online.

You can log-in or register for a user account here.

Anmeldung




 


 Log in Problems?
 New User? Sign Up!



Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Author Message
rgerhardsOffline
Post subject: Bedeutung des Vorzeichenbits in Zweierkomplementdarstellung  PostPosted: Dec 11, 2009 - 09:58 AM



Joined: Sep 25, 2006
Posts: 688

Status: Offline
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".
 
 View user's profile Send private message  
Reply with quote Back to top
Display posts from previous:     
Jump to:  
All times are GMT + 1 Hour
Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Credits
:: RSS Feed: ::
Page created in 0.140202045441 seconds.

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