Logo Logo
InfoHome Themen Projekte Links Software
Themen
JavaHamster
BlueJ
Java
HTML
XHTML
CSS
XML
Datenbanken
MySQL
Theoretische Informatik
PHP
Kara
Lego-Roboter
Algorithmen
Dijkstra
Definitionen
Einfache Datentypen
Flussdiagramme
Einfache Algorithmen
Arrays
Mehrdim. Arrays

Einfache Datentypen in Java

 Datentyp Größe  Wertebereich
 boolean 1 Byte  = 8 Bit
 true, false (0, 1) 
 char
 2 Byte = 16 Bit
 Unicode-Zeichen
 byte
 1 Byte = 8 Bit
 -128 ... 127
 short
 2 Byte = 16 Bit
 -32.768 ... 32.767
 int
 4 Byte = 32 Bit
 -2.147.483.648 ... 2.147.483.647
 long
 8 Byte = 64 Bit
 -9.223.372.036.854.775.808 ... 9.223.372.036.854.775.807
 float
 4 Byte = 32 Bit
 1,40239846E-45 ... 3,40282347E+38
 double
 8 Byte = 64 Bit
 4,94065645841246544E-324 ... 1,79769131486231570E+308

Der Wertebereich bei den ganzzahligen Datentypen reicht von -2n-1 bis 2n-1-1, wobei n für die Anzahl der zur Verfügung stehenden Bits steht.

Exkurs: Dualzahlen

Im Dualsystem (auch Binärsystem) gibt es statt 10 (wie im Dezimalsystem) nur 2 verschiedene Ziffern, die in der Regel mit 0 und 1 bezeichnet werden. Ein Beispiel für eine 4-Bit Dualzahl wäre die Zahl 01102. Der Index 2 zeigt hier an, dass es sich um eine Dualzahl handelt.

Umwandlung vom Dualsystem ins Dezimalsystem

Möchte man eine Zahl von Dualsystem ind Dezimalsystem umrechnen, schreibt man sie einfach als Summe von Produkten aus den Ziffern 0 und 1 mit Potenzen zur Basis 2. Dabei sind die Zweierpotenzen den Stellen folgendermaßen zugeordnet:

 01
1
0
 23 = 8
 22 = 4
 21 = 2
20 = 1

Der Exponent der Zweierpotenz wird von rechts nach links (beginnend mit 0) je Stelle um Eins größer. Die Umrechnung ergibt sich nun wie folgt:

01102 = 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 = 0 + 4 + 2 + 0 = 610. Die 4-Bit Dualzahl 0110 entspricht also der Dezimalzahl 6.

Übrigens lassen sich auch Dezimalzahlen entsprechend zerlegen:

121 = 1 * 102 + 2 * 101 + 1 * 100 = 100 + 20 + 1 = 121.

Von rechts nach links geben die Ziffern einer Dezimalzahl die Einer, Zehner, Hunderter, usw. an. Bei einer Dualzahl entsprechend die Einer, Zweier, Vierer, Achter, usw...

Umwandlung vom Dezimalsystem ins Dualsystem

Um eine Dezimalzahl ins Dualsystem umzurechnen geht man folgendermaßen vor:

  1. Bilde den Rest der Zahl bei Division durch 2.
  2. Teile die Zahl ganzzahlig (Nachkommastellen werden abgeschnitten!) durch 2.
  3. Wenn die bei 2. errechnete Zahl größer als 0 ist, wiederhole die Schritte 1 und 2 mit dieser Zahl.

Beispiel: 13410

  • 134 % 2 = 0 ( %-Operator steht für Restbildung, wenn man 134 durch 2 teilt bleibt kein Rest)
  • 134 / 2 = 67 (67 > 0, also nochmal...)
  • 67 % 2 = 1
  • 67 / 2 = 33 (Nachkommastellen abschneiden!)
  • 33 % 2 = 1
  • 33 / 2 = 16
  • 16 % 2 = 0
  • 16 / 2 = 8
  • 8 % 2 = 0
  • 8 / 2 = 4
  • 4 % 2 = 0
  • 4 / 2 = 2
  • 2 % 2 = 0
  • 2 / 2 = 1
  • 1 % 2 = 1
  • 1 / 2 = 0 (Abbruch)

Die Dualzahldarstellung erhält man nun, indem man die Reste von unten nach oben hintereinander schreibt:

13410 = 100001102

Negative Dualzahlen: Darstellung im Zweierkomplement

Die gebräuchlichste Methode zur Codierung negativer Dualzahlen besteht in der 2er-Komplement-Darstellung. Dabei wird das erste (führende) Bit als Vorzeichenbit verwendet.

Positive Zahlen haben eine führende Null. Die Dualzahl wird auf den folgenden Stellen genauso gebildet wird, wie bei den bisher betrachteten vorzeichenlosen Dualzahlen. Beispiel: Die Zahl 610 hat die Darstellung 01102.

Negative Zahlen haben eine führende Eins. Im Unterschied zu der obigen Reihenentwicklung geht das führende Bit (das ja mit der höchsten Zweierpotenz multipliziert wird und deswegen auch "most significant bit (MSB)" genannt wird) als negativer Summand in die Potenzreihe ein.

Die Dualzahl 11002 (2er-Komplement-Darstellung) entspricht also der Dezimalzahl -1 * 23 + 1 * 22 + 0 * 21 + 0 * 20 = -8 + 4 = -4.

Die Umrechnung kann auch nach folgendem Verfahren durchgeführt werden:

  • Addiere Eins zur gegebenen 2er-Komplement Dualzahl. [1100 + 0001 = 1101]
  • Invertiere alle Bits (Aus allen Einsen werden Nullen und umgekehrt). [0010]
  • Das Ergebnis ist positiv und lässt sich leicht als Dezimalzahl bestimmen. [00102 = 410]
  • Die negative Ausgangszahl ist gerade die Gegenzahl der bestimmten positiven Zahl. [11002 = -410]

Das Verfahren ist vor allem hilfreich, wenn man es in der umgekehrten Richtung anwendet und zur Umwandlung vom Dezimalsystem ins 2er-Komplement einsetzt. Wir gehen wieder von -410 aus.

  • Bestimme den Betrag der gegebenen (negativen) Ausgangszahl. [| -4 | = 4 ]
  • Bestimme die Dualzahldarstellung der nun positiven Zahl. [410 = 00102]
  • Invertiere alle Bits. [1101]
  • Ziehe vom Ergebnis Eins ab. Fertig! [1101 - 0001 = 11002 = -410]

Addition von Dualzahlen im 2er-Komplment

Die Codierung im 2er-Komplement ist gängig, da sie das Addieren und Subtrahieren von Dualzahlen (fast) wie gewohnt ermöglicht:

 0100 |  4
+0011 | +3
----- | --
 0111 |  7

 0100 |    4
+1011 | +(-5)
----- | -----
 1111 |   -1
 0001 |    1
+1111 | +(-1)
----- | -----
10000 |    0
 1100 |   -4
+1111 | +(-1)
----- | -----
11011 |   -5

Die Addition klappt problemlos, wenn man auftretende Überläufe (wie im dritten und vierten Beispiel) einfach ignoriert.

Außerdem muss man darauf achten, dass der Wertebereich nicht verlassen wird:

  0110      |  6
+ 0011      | +3
------      | --
  1001 = -7 |  9

Wie folgende Beispiel zeigen, sind die Dualzahlen im 2er-Komplement wie auf einem Ring angeordnet:

  0111      |  7
+ 0001      | +1
------      | --
  1000 = -8 |  8
  1000     |   -8
+ 1111     | +(-1)
------     | -----
 10111 = 7 |   -9

Verlässt man den Wertebereich auf der einen Seite tritt man auf der anderen Seite wieder ein (7 + 1 = -8 bzw. -8 - 1 = 7). In Java verursacht ein solcher Übertritt keinen Fehler. Man muss also selbst darauf achten, dass man den Wertebereich einer ganzzahligen Variable nicht verlässt.

intring.jpg

 

 

» drucken: pdf | html

© 2004-2024 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück