{
"cells": [
{
"cell_type": "markdown",
"id": "caf638c6",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "slide"
}
},
"source": [
" # Datentypen und Genauigkeit\n",
"#### Marcel Lüthi, Patrick Schnider
Departement Mathematik und Informatik, Universität Basel"
]
},
{
"cell_type": "markdown",
"id": "8a90fd16",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"In diesem Notebook schauen wir uns vier grundlegende Datentypen von Java an. Sie lernen:\n",
"- den Wertebereich der Datentypen.\n",
"- wie Sie die Datentypen zwischeneinander konvertieren können.\n",
"- was Sie beachten müssen wenn es um die Genauigkeit geht."
]
},
{
"cell_type": "markdown",
"id": "d0bc709d",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Datentypen für ganze Zahlen und Gleitkommazahlen"
]
},
{
"cell_type": "markdown",
"id": "d3905f84",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"Sie haben den Unterschied zwischen ganzen Zahlen und Gleitkommazahlen in Java kennen gelernt. Dafür haben Sie bisher `int` und `double` verwendet. In Java gibt es aber noch den Datentpen `long` für ganze Zahlen, dessen Wertebereich grösser ist als der von `int`. Bei den Gleitkommazahlen gibt es noch den Datentypen `float`, welche die Zahlen weniger genau darstellt als `double`."
]
},
{
"cell_type": "markdown",
"id": "9020e00c",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Entscheidungskriterien\n",
"- Ganze Zahlen `int`. Verwenden Sie `long` wenn der Wertebereich von `int` nicht gross genug ist.\n",
"- Gleitkommazahlen `double`. Verwenden Sie`float` wenn der Speicher zu begrenzt ist.\n",
"- (Nicht in der Vorlesung `byte` und `short`, welche ganze Zahlen nur in einem kleineren Bereich als `int` darstellen können.)"
]
},
{
"cell_type": "markdown",
"id": "6e852873",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Um einen Zahlwert als `long` zu kennzeichnen, folgt nach der ganzen Zahl der Buchstabe `l` (kleines `L`).\n",
"```java\n",
"1l\n",
"9876543210l\n",
"```\n",
"Um einen Zahlenwert als `float` zu kennzeichnen, folgt nach dem Zahlwert der Buchstabe `f`.\n",
"```java\n",
"1f\n",
"-2.345f\n",
"3.1415e-3f\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "1b5f72a1",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Miniübung\n",
"- Initialisieren Sie je eine Variable von Typ `long` und `float`.\n",
"- Weisen Sie die Variable vom Typ `float` einer Variable vom Typ `double` zu.\n",
"- Weisen Sie die Variable vom Typ `long` einer Variable vom Typ `int` zu.\n",
"- Was beobachten Sie?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "aa02e1b2",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"public class Values {\n",
" public static void main(String[] args) {\n",
" // Ihre Lösung kommt hier hin\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "578f8405",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"Values.main(new String[0]);"
]
},
{
"cell_type": "markdown",
"id": "872f0d88",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Ordnung der Datentypen"
]
},
{
"cell_type": "markdown",
"id": "66f9d921",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Auf den Wertebereiche der Datentypen bezogen gilt:\n",
"$$ int \\subset long \\subset float \\subset double$$\n",
"\n",
"In Java ist die Zuweisung eines Wertes an eine Variable des gleichen oder *mächtigeren* Datentyps erlaubt."
]
},
{
"cell_type": "markdown",
"id": "f3fb5d9a",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Wertebereich"
]
},
{
"cell_type": "markdown",
"id": "f2f1e602",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"In Java gibt es definierte Konstanten welche den Wertebereich der jeweiligen Datentypen angeben.\n",
"\n",
"Vorsicht: Die Konstanten mit dem selben Namen können für unterschiedliche Typen etwas anderes bedeuten. Dies könnte ein Hinweis auf nicht so guten Programmierstil sein."
]
},
{
"cell_type": "markdown",
"id": "2aec92ac",
"metadata": {
"deletable": false,
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Konstanten welche den Wertebereich angeben sind:\n",
"\n",
"| Typ | Konstante | Bedeutung |\n",
"| --- | --- | --- |\n",
"| int | Integer.MAX_VALUE | grösster, darstellbarer Wert |\n",
"| int | Integer.MIN_VALUE | kleinster, darstellbarer Wert |\n",
"| long | Long.MAX_VALUE | grösster, darstellbarer Wert |\n",
"| long | Integer.MIN_VALUE | kleinster, darstellbarer Wert |\n",
"| float | Float.MAX_VALUE | grösster, darstellbarer Wert |\n",
"| float | Float.MIN_VALUE | kleinster, positiver, darstellbarer Wert |\n",
"| double | Double.MAX_VALUE | grösster, darstellbarer Wert |\n",
"| double | Double.MIN_VALUE | kleinster, positiver, darstellbarer Wert |\n",
"\n",
"