Posts mit dem Label Zahlendarstellung werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Zahlendarstellung werden angezeigt. Alle Posts anzeigen

Freitag, 8. Februar 2013

Darstellung negativer Zahlen: Zweierkomplement und VZB-Darstellung

Wie ein Rechner positive Zahlen darstellt kann man hier nachlesen. Ein Computer kann aber nicht nur mit positiven, sondern auch mit negativen Zahlen rechnen. Wie der Rechner diese darstellt, soll hier kurz verdeutlicht werden.

Es gibt verschiedene Möglichkeiten negative Zahlen binär darzustellen, die beiden bekanntesten sind die Vorzeichen-Betrags-Darstellung und das Zweierkomplement. Das am häufigsten verwendete Verfahren ist jedoch die Darstellung als Zweierkomplement. Dennoch werde ich hier beide Verfahren vorstellen.

Anmerkung: 
Ich werde die Binärzahlen in diesen Beispielen zur Veranschaulichung mit lediglich 4 Stellen angeben. Natürlich schaut dies in der Praxis anders aus. Das Prinzip bleibt aber das selbe.

VZB-Darstellung
Möchte man beispielsweise die Zahl -7 in VZB-Darstellung repräsentieren, so muss man zunächst ihren Betrag, also +7, im Binärsystem darstellen, also 0111. Die VZB-Regel besagt, dass das erste Bit bei positiven Zahlen 0 und bei negativen Zahlen 1 sein soll. Da -7 offensichtlich negativ ist muss hier das erste Bit auf 1 gesetzt werden, also ist -7 in VZB-Darstellung 1111.

Schritt für Schritt:
1) -7     | Betrag berechnen
2)  7     | Binär darstellen
3) 0111   | erstes Bit auf 1 setzen
4) 1111   | fertig!

Zweierkomplement-Darstellung
Auch hier sei als Beispiel wieder die Zahl -7 gewählt. Möchte man diese als Zweierkomplement darstellen, so muss man zunächst ebenfalls den Betrag im Binärsystem hinschreiben. Nun muss man jedoch alle Bits invertieren, das bedeutet, aus 1 wird 0 und aus 0 wird 1. Bei -7 würde aus 0111 demnach 1000 werden. Danach ist man jedoch noch nicht fertig, zum Schluss wird nämlich noch binär eine 1 addiert. -7 in Zweierkomplement-Darstellung ist also 1001.

Schritt für Schritt:
1) -7     | Betrag berechnen
2)  7     | Binär darstellen
3) 0111   | invertieren
4) 1000   | 1 addieren
5) 1001   | fertig!

Freitag, 1. Juni 2012

Zahlensysteme (Dezimal, Hexadezimal und Binär)

Einleitung

Es gibt viele verschiedene Systeme um bestimmte Zahlen darzustellen. Das bekannteste ist wohl das Dezimalsystem, in dem jede beliebige Zahl mit Hilfe der Ziffern 0-9 dargestellt werden kann. In der Programmierung trifft man jedoch auch häufig auf andere Arten der Zahlendarstellung, wie dem Hexadezimalsystem oder dem wohl wichtigsten in der Computerwelt, dem Binärsystem


Dezimalsystem

Basiszahlen         : 10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Zahlendarstellung   : 1, 234, 5.6 ...
Berechnungsbeispiel : 234
                      2*102
                    +  3*101
                    +   4*100
                    = 200 + 30 + 4
                    = 234 

Hexadezimalsystem

Basiszahlen         : 16 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)
                      A = 10, B = 11, C = 12, D = 13, E = 14, F = 15
Zahlendarstellung   : 12, AB, D3F ...
Umrechnungsbeispiel : D3F
                      D*162
                    +  3*161
                    +   F*160
                    = 12*256 + 3*16 + 15*1
                    = 3072 + 48 +15
                    = 3135

Binärsystem

Basiszahlen         : 2 (0, 1)
Zahlendarstellung   : 10, 0101, 1001 ...
Umrechnungsbeispiel : 1010
                      1*23
                    +  0*22
                    +   1*21
                    +    0*20
                    = 1*8 + 0*4 + 1*2 + 0*1
                    = 8 + 0 + 2 + 0
                    = 10
Wie euch bestimmt aufgefallen ist gibt es eine bestimmte Regel, mit welcher man jede beliebige Zahl eines Zahlensystems in eine Dezimalzahl umrechnen kann. Diese möchte ich hier kurz voretsllen.

Dezimalzahl = [Ziffer] * [Basiszahl][Exponent]
Der Exponent bildet sich aus der Anzahl der Ziffern einer Zahl. Es gilt:
Exponent -> ...[4][3][2][1][0].[-1][-2][-3]...
(in den eckigen Klammern steht der Exponent der Ziffern vor und hinter dem Komma)

Das ist zwar sehr hilfreich, aber wie berechnet man eine Dezimalzahl in eine Binär oder Hexadezimalzahl um, und wie bestimmt man die Binärzahl einer Hexadezimalzahl und andersrum? Dies werde ich nun erklären.

Dezimal -> Hexadezimal

Beispiel:

Zahl = 1234
Basiszahlen (Hexadezimal) = 16

1234 / 16 = 77      Rest:   2
    77 / 16 =   4      Rest: 13
      4 / 16 =   0      Rest:   4

Nun muss man die Rest-Ziffern von unten nach oben lesen, aus zweistelligen Zahlen werden bekanntlich Buchstaben, also ist der

Hexadezimalwert = 4D2

Dezimal -> Binär

Beispiel:

Zahl = 1234
Basiszahlen (Binär) = 2

1234 / 2 = 617     Rest: 0
  617 / 2 = 308     Rest: 1
  308 / 2 = 154     Rest: 0
  154 / 2 =   77     Rest: 0
    77 / 2 =   38     Rest: 1
    38 / 2 =   19     Rest: 0
    19 / 2 =     9     Rest: 1
      9 / 2 =     4     Rest: 1
      4 / 2 =     2     Rest: 0
      2 / 2 =     1     Rest: 0
      1 / 2 =     0     Rest: 1

Auch hier müssen die Rest-Ziffern wieder von unten nach oben gelesen werden. Die Dezimalzahl 1234 ergibt im Binärsystem also

Binärwert = 10011010010

Hexadezimal -> Binär


0 = 0000    6 = 0110    C = 1100
1 = 0001    7 = 0111    D = 1101
2 = 0010    8 = 1000    E = 1110
3 = 0011    9 = 1001    F = 1111
4 = 0100    A = 1010
5 = 0101    B = 1011

Beispiel:

Zahl = B7

B = 1011
7 =  0111
Binärwert = 10110111

Binär -> Hexadezimal

Zahl = 1010 0101 1101
1010 = A
0101 = 5
1101 = D

Hexadezimalwert = A5D