Einführung in Datentypen in C im Rahmen der Lehre des Programmierens. (C Datentyp C Datentypen C Typ C Typen, C int C char C double), Lektion, Seite 720266
https://www.purl.org/stefan_ram/pub/c_datentypen_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Typen in C 

Wir haben bisher schon verschiedene Ausdrücke  (Literale), wie »65«, »12.82« oder »"Alpha"« kennengelernt. Diese gehören offensichtlich verschiedenen Typen an: Der erste Ausdruck steht für eine Zahl ohne  Nachkommastellen, der zweite für eine Zahl mit  Nachkommastellen und der dritte ist gar keine Zahl, sondern ein Text. Tatsächlich ordnet man solchen Ausdrücken in C  verschiedene sogenannte Typen  zu (die man auch Datentypen  nennt). Beispielsweise hat der Ausdruck »65« den Typ ›int‹, und der Ausdruck »12.82« den Typ ›double‹.

Jedem Ausdruck wird durch Regeln der Programmiersprache ein bestimmter Typ  zugeordnet. Der Typ eines Ausdrucks legt fest, an welchen Stellen eines Programmes der Ausdruck verwendet werden kann, und was diese Verwendung dann bedeutet.

int

Die Werte des Datentyps ›int‹ sind die ganzen Zahlen in einem für die jeweilige C -Implementation natürlichen Wertebereich, der aber mindestens die Werte von «-32767» bis «32767» umfaßt.

Der Datentyp ›int‹ wird auch als ein ganzzahliger Typ  bezeichnet, da seine Literale ganzzahlig sind, also keine Nachkommastellen haben.

Die Literale dieses Typs sind die ganzzahligen Numeralia, wie beispielsweise »0« oder »12«.

double

Ein Numerale mit einem Punkt ».« hat den Typ ›double‹. Der Datentyp ›double‹ enthält Werte, die auch Nachkommastellen haben können.

Dieser Typ ist im allgemeinen der Typ von Literalen mit Nachkommastellen, jedoch wird dieser Typ einem Literal auch dann zugewiesen, wenn das Literal gar keine richtigen Nachkommastellen hat, wie bei »2.0«, da es einfacher ist, das formale Kriterium heranzuziehen, welches am Anfang dieses Abschnitts genannt wurde. Werte des Typs ›int‹ haben hingegen niemals Nachkommastellen.

Der Datentyp ›double‹ wird auch als Gleitkommatyp  bezeichnet, da seine Zahlen intern normalerweise in einer sogenannten „Gleitkommadarstellung“ abgespeichert werden.

Ein Numerale vom Datentyp ›double‹, wie beispielsweise »2.0«, ist ein Gleitkommanumerale.

Ungenauigkeiten bei double-Werten

Es ist möglich, daß double-Werte manchmal geringfügig (in vielen Fällen um weniger als ein Billiardstel) von den mathematischen Werten der verwendeten Numeralia abweichen. So ist der Wert des Numerales »1.9999999999999999« unter manchen C -Implementationen dem Wert des Numerales »2.0« gleich. Oft sind daher nur die ersten zirka 16 Stellen eines double-Wertes bedeutsam, während weiter hinten liegende Stellen ignoriert werden sollten.

Daher können double-Werte gut für prinzipiell ohnehin ungenaue Werte verwendet werden, wie beispielsweise Meßwerte kontinuierlicher Größen (wie Länge, Geschwindigkeiten oder Temperaturen), die sowieso nie ganz genau gemessen werden können - wer kann beispielsweise seine genaue Körpergröße in Nanometern angeben?

Wegen der Ungenauigkeiten sind double-Werte für Währungsbeträge aber nur mit Einschränkungen verwendbar, denn bei Währungsbeträgen sollten gar keine  Abweichungen von den mathematischen Werten ihrer Numeralia auftreten. C  bietet verschiedene Möglichkeiten, auch Währungsbeträge korrekt darzustellen, doch können diese hier noch nicht ausführlicher behandelt werden.

E-Numeralia

In einem Numerale steht »E« für „mal Zehn hoch“. »2E3« bedeutet also beispielsweise ‹ 2 × 10³ ›.

‹ 10³ › bezeichnet den Wert, den man erhält, wenn man die Zahl Eins drei Mal mit 10 multipliziert. Allgemein bezeichnet für eine natürliche Zahl n  der Term ‹ 10  › den Wert, den man erhält, wenn man die Zahl Eins n -mal mit 10 multipliziert. ‹ 2 × 10³ = 2 × 1 · 10 · 10 · 10 = 2 × 1000 = 2000 ›

Dies bedeutet praktisch, daß das Dezimalkomma bei »2.0« um drei Schritte nach rechts verschoben werden soll. Man erhält so »2000.0«.

»2E3« bedeutet also nicht  etwa „2³“, also die Zahl, welche man erhält indem man die Zahl Eins dreimal mit der Zahl 2 multipliziert (8).

main.c

#include <stdio.h>

int main( void )
{ printf
( "%g\n", 2E3 ); }

stdout
2000

Ein solches Numerale mit einem »E« hat den Datentyp ›double‹, selbst wenn es keinen  Punkt enthält.

Wir verzichten an dieser Stelle auf eine ausführliche Darstellung des Aufbaus von E-Numeralia, da E-Numeralia im weiteren Verlauf dieses Kurses nur selten als Teile des Quelltextes vorkommen. Zahlenwerte werden von Programmen zwar manchmal in der E-Schreibweise ausgegeben, aber um diese zu verstehen, reicht die obenstehende Erklärung bereits aus.

Werte des Typs ›double‹ können größer  als Werte des Typs ›int‹ sein. Ihre Ungenauigkeit kann sich bei großen Zahlen aber dann auch schon in den Stellen vor  dem Komma zeigen. Beispielsweise kann der Wert des double-Numerales »9223372036854775808.« zwar verwendet werden, aber er kann in den hinteren Stellen von den Stellen jenes Numerales abweichen (beispielsweise als «9223372036854776000.»).

Da der intern verwendete Wert bei der Ausgabe normalerweise auf nur sechs Stellen gerundet wird, kann man diesen internen Wert aber auch nicht ohne weiteres sehen. Wir können an dem folgenden Beispiel aber erkennen, daß C  von sich aus manchmal eine Schreibweise mit einem »e« in der Ausgabe verwendet. Das kleine »e« hat hierin dieselbe Bedeutung wie das bisher in diesem Abschnitt behandelte große »E«.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%g\n", 9223372036854775808. ); }

stdout
9.22337e+018

Die Ausgabedarstellung »9.22337e+018« bedeutet ‹ 9,22337 × 10¹⁸ ›, also ‹ 9223370000000000000 ›.

char *

Etwas vereinfacht gesagt ist der Datentyp von Zeichenfolgenliteralen, wie beispielsweise »"abc"«, der Typ »char *«.

Der Autor dieses Kurses spricht »char *« als “char pointer ” /kɑɚ ˈpɔɪntɚ/ aus, andere sagen “char star ” /kɑɚ stɑɚ/, das Wort »char« wird von vielen (darunter den meisten Experten) aber auch als /tʃɑɚ/ gesprochen, selten auch /ˈkæɚ/.

Man kann zu »char *« aber auch „Zeichenfolge“ sagen, wenn keine Mißverständnisse zu befürchten sind.

Die genaue Bedeutung von »char *« und der genaue Typ von Zeichenfolgenliteralen wird erst viel später (im Aufbaukurs) erklärt werden, aber man kann sich zunächst vorstellen, daß »char« „Schriftzeichen“ bedeutet und das Sternchen die Möglichkeit einer Wiederholung  des Voranstehenden ausdrückt – entsprechend der Tatsache, daß ein Zeichenfolgenliteral aus einer Folge beliebig vieler Zeichen bestehen kann.

Die Ausgabeformatierung von Werten

Das Verhalten des Programms ist nicht durch die Sprachspezifikation definiert, wenn ein int-Wert mit dem Umwandlungsspezifizierer »g« oder »s« ausgegeben wird.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", 7 ); }

stdout
7
main.c

#include <stdio.h>

int main( void )
{ printf
( "%g\n", 7 ); }

stdout
main.c

#include <stdio.h>

int main( void )
{ printf
( "%s\n", 7 ); }

Konsole

Genauso ist das Verhalten des Programms nicht durch die Sprachspezifikation definiert, wenn ein double-Wert mit dem Umwandlungsspezifizierer »d« oder »s« ausgegeben wird oder ein char *-Wert mit dem Umwandlungsspezifizierer »d« oder »g« ausgegeben wird.

Umwandlungsspezifizierer mit Datentypen

... ... Typ Merkwort

s  "Text" char * s-tring
d  123 int d-ezimalsystem
g  1.23 double g-leitkommazahl

Unportabler Code in C 

Wenn ein Numerale, dessen mathematischer Wert außerhalb des garantierten Bereichs des Datentyps ›int‹ liegt, in einem C -Programm wie ein int-Numerale verwendet wird, kann sich unter manchen C -Implementationen der mathematisch korrekte Wert ergeben.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", 1000000 ); }

stdout
1000000

Es ist aber genausogut auch möglich, daß sich unter einer anderen C -Implementation dann ein mathematisch falscher Wert ergibt.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", 1000000 ); }

stdout
4096

Wenn man ein Programm schreiben will, das unter jeder  C -Implementation das gewünschte Verhalten zeigt, muß man darauf achten, daß ein Programm auch dann das gewünschte Verhalten zeigt, wenn eine Implementation für int-Werte nur den minimalen Wertebereich von -32768 bis +32767 unterstützt.

Ein Programm, das unter jeder  C -Implementation das gewünschte Verhalten zeigt, wird als portabel  bezeichnet. Wenn man ein Programm nicht portabel schreibt, sondern so, daß es nur unter der gerade zur Entwicklung verwendeten Implementation korrekt arbeitet, dann kann dies bedeuten, daß man das Programm nicht mit anderen C -Implementationen verwenden kann.Dies kann dann zu Problemen führen, wenn die C -Implementation gewechselt werden muß, etwa weil sie vom Hersteller nicht mehr für neue Betriebssystem angeboten wird.

Fehlermeldungen in C 

Der Compiler einer C -Implementation kann es oft nicht erkennen, wenn ein Programm so programmiert wurde, daß es nicht portabel ist. Deswegen erhält man in vielen Fällen keine Meldung vom Compiler, wenn ein Programm so programmiert wurde, daß es nicht portabel ist. Ein Programm sollte aber möglichst portabel sein. Daraus folgt, daß der C -Programmierer selber darauf achten muß, daß seine Programme gegebenenfalls portabel sind. Dies ist schwierig, da es sein kann, daß ein Programm ohne Fehlermeldungen kompiliert wird und sie auch wie gewünscht verhält, aber dennoch nicht portabel ist. Solche Mängel lassen sich weder vollständig durch Meldungen des Compilers erkennen noch durch Ausprobieren des Programms, sondern nur durch Lernen der Regeln und aufmerksames Schreiben und Lesen des Quelltextes.

Typen in C 

Zahlentypen (wie ›int‹ und ›double‹) werden auch „numerische Typen“ genannt, während man ›char *‹ als einen Adreßtyp bezeichnen kann. Die Gründe für die Bezeichnung „Adreßtyp“ werden aber erst später behandelt werden.

Wir kennen bisher zwei numerische Typen und einen Adreßtyp.

numerische Typen
int
double
Adreßtyp
char *

Typen im Quelltext

Bis auf weiteres schreiben wir Typen nicht  in Programme. Sie dienen uns lediglich zur Beschreibung  von Programmteilen.

Übungsfragen

?   Literaltypen

Welchen Typ haben die folgenden Literale jeweils?

  • 1
  • 1.2
  • 2E3
  • "2"

?   Aussprache

Wie lautet die Aussprache von »int«?

Wie die von “print ”, nur ohne “pr ”.
Wie die von “integer ”.

Ergänzungen zu Typen in C  *

Aussprache von Datentypen *

Der Datentypname »int« sollte nicht “integer ” ausgesprochen werden, da der Begriff “integer types ” in C  eine andere Bedeutung hat.

»int« ist keine  Abkürzung von “integer ”!

Aussagen aus Normen *

Zitat *
An unsuffixed floating constant has type double.
N1570 6.4.4.2p4:
Zitat zur Ausgabe mit Umwandlungsspezifizierer
If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
N1570 7.21.6.1p9

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720266 stefan_ram:720266 C Datentyp C Datentypen C Typ C Typen, C int C char C double kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , Fließkommazahl, Fließkommazahlen, Fliesskommazahl, Fliesskommazahlen, Flieskommazahl, Flieskommazahlen, Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720266, slrprddef720266, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c_datentypen_de