14. Datentypen (Grundlagen)#

Wie in Abschnitt Repräsentation beschrieben, befinden sich im Speicher des (digitalen) Computers ausschließlich Bits. Sie können sich den Speicher als eine lange lange Liste von Bits vorstellen. Diese Bits können nur einen von zwei Zuständen (0 und 1) annehmen. Dennoch verarbeiten Computer Zahlen, Text, Bilder und mehr.

../../_images/ram1.png

Abb. 14.1 Der Arbeitsspeicher ist eine sehr lange Liste bestehend aus Bits. Die Adresse ist im Wesentlichen die Nummer / der Index eines bestimmten Speicherplatzes.#

Diese „Magie“ geschieht durch die Wahl und Implementierung einer Interpretation. Unterschiedliche Interpretationen ermöglichen es, Bits und Byte als Zahlen, Text, Bilder usw. zu verarbeiten.

Im Abschnitt Variablen haben wir von einer Variable als Tupel von Wert und Speicheradresse gesprochen. Die Variable „kennt“ die Speicheradresse an welche der Wert im Speicher steht. Soweit so gut, woher aber weiß der Interpreter ob es sich bei der Folge von Bits um eine Zahl oder um etwas anderes handelt?

Weisen wir der Variablen char den Wert 'a' zu

char = 'a'
char
'a'

so wird im Speicher irgendwo der Wert als binärer ASCII-Code stehen:

\[01100001_2.\]

Würde man diese Bitfolge als ganze Zahl interpretieren wäre dies gleich

\[2^0 + 2^5 + 2^6 = 97_{10}.\]

Warum gibt uns der Interpreter aber 'a' und nicht 97 aus? Und weshalb kommt es bei folgender Addition

x = 3
char = 'a'
x + char
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[2], line 3
      1 x = 3
      2 char = 'a'
----> 3 x + char

TypeError: unsupported operand type(s) for +: 'int' and 'str'

zu einem Fehler? Die kurze Antwort lautet: Wegen der Datentypen der Variablen x bzw. char.

print(f'type of x: {type(x)}')
print(f'type of char: {type(char)}')
type of x: <class 'int'>
type of char: <class 'str'>

Der Datentyp der Variablen char ist str (Zeichenkette). Diese Information erhält der Interpreter und interpretiert deshalb die Bitfolge im Speicher als Zeichenkette. Die +-Operation ist für die Kombination von Datentypen int und str nicht definiert. Deshalb kommt es zu einem Fehler.

Das ist allerdings eine unbefriedigende Erklärung, denn wir wissen noch nicht wie Datentypen realisiert werden. Wie ist der Zusammenhang zwischen den Programmiersprachen, welche alle auf Datentypen basieren, und den Übersetzern oder Interpretern und der Computerhardware?

In diesem und nächstem Kapitel unternehmen wir den Versuch Ihnen das Konzept der Datentypen zu vermitteln. Dies beinhaltet Theorie und Praxis. Um in Python mit den Datentypen praktisch umgehen zu können, reicht es vorerst dieses Kapitel gut zu durchdringen. Im nächsten Kapitel, Datentypen (Fortsetzung), werden wir hingegen genauer untersuchen, weshalb es Datentypen gibt und welchen Einfluss diese im Detail haben. Möchten Sie also ein tieferes Verständnis erhalten wie Datentypen mit dem Ablauf eines Programms und der Computerhardware zusammenhängen, lohnt sich der Blick in das nächste Kapitel Datentypen (Fortsetzung).

Wir versuchen folgende Fragen zu beantworten:

  1. Grundlagen

    1. Was kann ich in Python mit einer Variable eines bestimmten Typs anfangen? Abschnitt 4.1 bis 4.9.

    2. Welche Typisierung verwendet Python? Abschnitt 4.2 Pythons Typisierung.

  2. Fortsetzung

    1. Was ist der Unterschied zwischen statischer und dynamischer Typisierung? Abschnitt 5.1 Dynamische und statische Typisierung.

    2. Weshalb gibt es überhaupt Datentypen? Abschnitt 5.2 Existenzberechtigung.

    3. Was passiert bei einer Änderung des Datentyps einer Variablen? Abschnitt 5.3 Interpretationswechsel.

    4. Welche Datentypen gibt es? Abschnitt 5.4 Arten von Datentypen.

    5. Warum gibt es in Python keine primitiven Datentypen? Abschnitt 5.5 Primitive Datentypen in Python?).