Dies ist eine alte Version des Dokuments!


Datentypen

Jetzt einiges zu den Variablen:
Wenn wir wollen, dass der Computer sich etwas "merkt", brauchen wir etwas, worin dieses etwas abgespeichert wird, damit es verarbeit werden kann: Eine Variable. Es gibt dabei verschiedene Typen von Variablen und zudem mit unterschiedlichen Datenbereichen.

Datentypen werden in zwei Gruppen gegliedert:

Alles, was im Computer irgendwie gespeichert und verarbeitet wird, wird in Binärcode übersetzt (sogar auch die Programme, wie wir bereits gelernt haben). Bei positiven ganzen Zahlen2) mag das etwas einfach sein, denn zu jeder Zahl gibt es ja die Binärdarstellung…

Ganze Zahlen

Ganze Zahlen werden im Zweierkomplement repräsentiert.3)

Beispiel:
`23 = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 10111 `

Die verschiedenen Datentypen zur Repräsentation ganzer Zahlen unterscheiden sich in der Anzahl der verwendeten Bits.

-1 als byte:
`-1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1^2*0 = 11111111 `

Dabei wird das erste der 8 Bits4) negativ gedeutet. Naja, soviel Theorie reicht erst einmal, hier ein kleiner Überblick:

Typname kleinster Wert größter Wert Länge
byte 127 -128 8 Bits
short 32767 -32768 16 Bits
int 2147483647 -2147483648 32 Bits
long 9223372036854775807 -9223372036854775808 64 Bits

Die Frage ist nun: Wie werden Zahlen (wie die 3 und die 4 im ersten Bespiel) 5) repräsentiert, z.B. 4711?
Antwort: Wenn nicht anders angegeben, dann immer als int!

Dies kann zu Problemen führen, wenn die Literalkonstante (Zahl) einen Wert ausserhalb von int repräsentiert.

Probiere folgende Anweisung aus:

   System.out.println( 9223372036854775807 );
<code>
 
Welche Fehlermeldung wird ausgegeben? ((Numeric overflow)) Wann? ((beim Kompilieren (Übersetzen) )).\\
Wie kann man dies verhindern? Durch Hinzunahme von ''L'' bzw. ''l'' wird ein Ganzzahlliteral als long-Zahl betrachtet.
 
<code java>
   System.out.println( 9223372036854775807L );
<code>
 
===== Gleitkommazahlen =====
 
**Motivation**
\\
  - Was gibt folgende Anweisung aus? <code java>   System.out.println(1/10);


Lösung: 6)
Ursache: 7)

  1. Wie muss man obige Anweisung ändern, damit das richtige Ergebnis ausgegeben wird? 8)

Hier wird statt der Ganzzahlen ein Datentyp für Gleitkommazahlen9) benötigt. Java bietet hierzu die Datentypen float und double:

Auch hier ein Überblick über die interne Repräsentation 32 bzw. 64 Bit im IEEE 754 Standard:

Typname größter positiver Wert kleinster positiver Wert Länge
float ≈3.40282E+38 ≈1.40129E-45 32 Bits
double ≈1.79769E+308 ≈4.94065E-324 64 Bits
1) auch: einfache Datentypen
2) also: Natürlichen Zahlen
3) muss man erst einmal nicht verstehen ;-)
4) das an der 27=128er Stelle
5) Das Fachwort lautet Literalkonstanten
6) Es wird 0 ausgegeben.
7) Da 1 und 10 Ganzzahlliterale sind, wird die Division als Ganzzahldivision interpretiert.
9) floating point numbers
start/info/11if/03_datentypen.1219505525.txt.gz · Zuletzt geändert: 23.10.2013 10:12 (Externe Bearbeitung)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0