datentypen in der programmiersprache c - schwerpunkt ...+c_ws0809.17-11-2008... · ganzzahl...

32
Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe „Programmierung“ FR 6.2 Informatik R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 1 / 32

Upload: tranphuc

Post on 21-Jun-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

EinheitDatentypen in der Programmiersprache CSchwerpunkt: Elementare (arithmetische) Datentypen

Kurs C/C++ Programmierung, WS 2008/2009

Dipl.Inform. R. SpurkArbeitsgruppe „Programmierung“

FR 6.2 Informatik

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 1 / 32

Page 2: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Überblick: Typen und Datentypen in der Programmiersprache C

Überblick: Typen in der Programmiersprache C

• Laut den ANSI/ISO Standards gibt es in C drei Klassen von Typen:

• Objekt-Typen ( = Daten-Typen):+ Datentypen, z.B. int, beschreiben Variablen, z.B. int a;

• Funktionstypen:+ Funktions-Prototypen wie etwa „int f (void)“, dienen derVorwärts-Deklaration von Funktionen(falls zyklische Abhängigkeiten zwischen Funktionen existieren)

• unvollständige Typen (void):+ Typ void bezeichnet eine leere Menge und wird bspw. verwendet, wenneine Funktion keinen Rückgabe-Wert oder keine Übergabe-Parameter hat.

• Im Folgenden: Elementare Datentypen

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 2 / 32

Page 3: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Elementare Datentypen in der Programmiersprache C

Elementare (einfache) Datentypen der Programmiersprache C (1)

• Die elementaren Datentypen von C:

• Ganzzahlige Typen (char, int)+ unterschiedliche Genauigkeiten für int durch voranstellen von:short, long, long long; auch noch von signed und unsigned.

• Gleitpunkt-Typen(float „einfache Genauigkeit“; double “doppelte Genaunigkeit)

+ long kann double vorangestellt werden.

• Aufzählungstypen bilden zusammen mit den Ganzzahligen Typen die Klasseder Integer-Typen.

• Der Datentyp (einer Variablen) legt die Darstellung einer Variablen durchden Compiler fest.

Durch diese Darstellung wird festgelegt:• Speicherbedarf (durch wieviele Bits wird Variable repräsentiert?)• Wertebereich• Genauigkeit (bei Gleitpunkt-Typen).

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 3 / 32

Page 4: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Elementare Datentypen in der Programmiersprache C

Einfache arithmetische Datentypen der Programmiersprache C (1)Datentyp Verwendung Wertebereich Größe

charkleine natürliche Zahl mit Vorzei-chen oder Zeichen

−128 . . . 127 1 Byte

unsignedchar

kleine natürl. Zahl ohne Vorzei-chen

0 . . . 255 1 Byte

intnatürliche Zahl −231 . . . 231 − 1 4 Byte

unsigned intnatürliche Zahl ohne Vorzeichen 0 . . . 232 − 1 4 Byte

floatDezimalzahl 3.4e + /− 38

(7-stellig)4 Byte

doubleDezimalzahl 1.7e + /− 308

(15-stellig)8 Byte

long doubleDezimalzahl 1.1e + /− 4932 10 Byte

• Größenangaben : abhängig von verwendeter Computerachitektur;• Angaben gelten für die (noch) üblichen 32-Bit Architekturen.• Zusätzliche Varianten an Ganzzahl-Typen:

• signed / unsigned : möglich mit char und int• short : möglich mit int• long : möglich mit int und double

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 4 / 32

Page 5: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Elementare Datentypen in der Programmiersprache C

Elementare (einfache) Datentypen der Programmiersprache C (2)

• Allgemein muss die folgende Ungleichung gelten:

+ char <= short int <= int <= long int <= long long int

+ float <= double <= long double

• Die in der Implementierung tatsächlich verwendeten Größen befinden sich in:

<limits.h> und <float.h>.

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 5 / 32

Page 6: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

• Ganzzahl-Datentyp:

int mit Variationen

(short, long, long long; signed, unsigned)

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 6 / 32

Page 7: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen

• Feststellung: nsymmetrischen Wertebereiche für positive und negativeBereiche:

+ z.B. short Þ mindest und typische Bitanzahl 16 + Wertebereich:−215 . . . 215 − 1 (−32.768 · · ·+ 32767)* 2er-Komplement Repräsentation von negativen Ganzzahl-Werten

• Warum 2er-Komplement-Bildung?Motto „statt b von a zu subtrahieren, addiere die Negation von b zu a!“

• 2er-Komplement-Bildung:Negation einer Zahl: Invertiere zunächst ihre Binärdarstellung undaddiere anschließend den Wert 1 hinzu!z.B. der Zahl 2:binär: 000000102 : erst alle Bits invertieren: 111111012,dann addiere eine 1: Ergebnis: 111111102 ( = −2 ).

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 7 / 32

Page 8: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen

• Beispiel 1: Rechnen in 2er-Komplement-Repräsentation: Subtraktion

#include <stdio.h>int main(void){

short a = 50; /* short-Zahlen: a,b,c */short b = 500; /* also 16 Bit-Zahlen */short c; /* => -32.768 ... 32.767 */

c = a - b;printf("%i", c); /* Ausgabe: -450 ,wie erwartet */return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 8 / 32

Page 9: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen

• Beispiel 2: Rechnen in 2er-Komplement-Repräsentation:Multiplikation mit negativem Multiplikator

#include <stdio.h>int main(void){

short a = 50; /* short-Zahlen: a,b,c */short b = -500; /* also 16 Bit-Zahlen */short c; /* => -32.768 ... 32.767 */

c = a * b;printf("%i", c); /* Ausgabe: -25000 ,wie erwartet */return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 9 / 32

Page 10: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

Ganzzahl-Arithmetik: Über- oder Unterlauf gefährdet!

• Beispiel 3: Rechnen in 2er-Komplement-Repräsentation:Multiplikation mit Überlauf50 ∗ 1000 = 50000 ;Þ als Multiplikation auf short-Größen: Ergebnis −15.536 * Überlauf!

#include <stdio.h>int main(void){

short a = 50; /* short-Zahlen: a,b,c */short b = 1000; /* also 16 Bit-Zahlen */short c; /* => -32.768 ... 32.767 */

c = a * b;printf("%i", c); /* Ausgabe: -15.536 statt 50.000 !*/return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 10 / 32

Page 11: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

Ganzzahl-Arithmetik: Über- oder Unterlauf gefährdet!

• Beispiel 4: Rechnen in 2er-Komplement-Repräsentation:Multiplikation mit Überlauf50 ∗ −1000 = −50000 ;Þ als Multiplikation auf short-Größen: Ergebnis 15.536 * Überlauf!

#include <stdio.h>int main(void){

short a = 50; /* short-Zahlen: a,b,c */short b = -1000; /* also 16 Bit-Zahlen */short c; /* => -32.768 ... 32.767 */

c = a * b;printf("%i", c); /* Ausgabe: 15.536 statt -50.000 !*/return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 11 / 32

Page 12: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

Ganzzahl-Bereiche in C-Compilern (1)

Neben der 2er-Komplement-Repräsentationgibt es noch zwei weitere Verfahren, um Zahlen zu negieren; beide werdenebenfalls vom C-Standard für Compiler akzeptiert:

• Einer-Komplement-Repräsentation:

+ wie bei 2er-Komplement – beim Negieren werden alle Bits invertiert,aber keine 1 mehr hinzuaddiert.

+ Zahlenbereich: −215 · · ·+ 215 Þ Zahlenbereich reduziert sich um 1(-32767 entfällt)

ferner: 2 verschiedene Zahlen für Wert 0: +0(00008) und −0(FFFF8).

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 12 / 32

Page 13: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

Ganzzahl-Bereiche in C-Compilern (2)

• Vorzeichen-Wert-Repräsentation:

+ beim Negieren wird nur Vorzeichen-Bit invertiert, alle restlichen Bitsunverändert.

+ ebenfalls: Zahlenbereich: −215 · · ·+ 215 Þ Zahlenbereich reduziertsich um 1 (-32767 entfällt)

ebenfalls: 2 verschiedene Zahlen für Wert 0: +0(00008) und −0(80008).

+ ins Compiler-Handbuch schauen, ob diese Repräsentationen grund-sätzlich eingesetzt werden oder per Compiler-Option verfügbar!

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 13 / 32

Page 14: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl Datentypen

Auch reine Positiv-Ganzzahl-Arithmetik Überlauf gefährdetUm das Schlüsselwort „unsigned“ werden Ganzzahl-Typen gekennzeichnet, dass essich um rein positive Zahlen handelt.

+ Vorzeichen-Bit nicht mehr benötigt Þ dafür größerer (positiver) Zahlenbereichmöglich: 0 · · ·+ 216 − 1, 0 · · ·+ 232 − 1, 0 · · ·+ 264 − 1.Auch die unsigned Ganzzahl-Typen sind Überlauf gefährdet:

• Beispiel 5: fehlerhafter Wert 4464 in die Ausgabe!

#include <stdio.h>int main(void){

unsigned short a = 70; /* short-Zahlen: a,b,c */unsigned short b = 1000; /* also 16 Bit-Zahlen */unsigned short c; /* => 0 ... +65.535 */

c = a * b;printf("%i", c); /* Ausgabe: 4464 statt 70.000!*/return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 14 / 32

Page 15: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

• Ganzzahl-Datentyp: char und(Variationen: signed, unsigned)

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 15 / 32

Page 16: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (1)

• Obgleich das Wort „char „ Abkürzung für “character (Schriftzeichen)„ auf einenZeichen-Typ hinweist:

+ es ist ein Ganzzahl-Typ!+ aber meist benutzt, um die Zeichen eines (7-Bit oder 8-Bit) Zeichensatzes zurepräsentieren (kodieren), z.B. ASCII-Zeichensatz.

• Größe einer Variablen vom Typ„char“, „signed char“ und „unsigned char“: 1 Byte( Þ i.a. 8 Bit (+ es könnten aber auch mehr Bits sein, bspw. 16!).

+ Es ist Compiler-abhängig, ob char dem Datentyp unsigned char odersigned char entspricht!

+ Datentyp eignet sich somit zur Darstelllung und Verarbeitung von ganzenZahlen in einem kleinen Wertebereich:unsigned char: 0 . . . 256 ; signed char: −128 . . . 127 !

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 16 / 32

Page 17: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (2)

• Beispiel: char-Typ basierte, übliche Arithmetik: wie erwartet:Multplikationsergebnis: -60

#include <stdio.h>int main(void){

signed char a = 20; /* char-Zahlen: a,b,c */signed char b = -3; /* also 8 Bit-Zahlen */signed char c; /* => -128 ... +127 */

c = a * b;printf("%i", c); /* Ausgabe: 60 wie erwartet */return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 17 / 32

Page 18: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (3)

Wie alle Ganzzahl-Typen:Variablen der Typen char, signed char und unsigned char sind Überlaufgefährdet!

• Beispiel: Überlauf für „signed char Typ“ Arithmetik:nicht wie erwartet: sondern fehlerhaftes Ergebnis: -88 .

#include <stdio.h>int main(void){

signed char a = 20; /* char-Zahlen: a,b,c */signed char b = -30; /* also 8 Bit-Zahlen */signed char c; /* => -128 ... +127 */

c = a * b;printf("%i", c); /* Ausgabe: -88; erwartet: -600 */return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 18 / 32

Page 19: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (4)

Allerdings übliche Benutzung des Typs char: Aufnehmen einerZeichen-Kodierung:

• aber meist benutzt, um die Zeichen eines Zeichensatzes in einer (7-Bitoder 8-Bit) Zeichenkodierung zu repräsentieren;

• Zeichen sind Buchstaben wie a, B, C, d, Ziffernzeichen wie 8, 4, 6 undSonderzeichen wie ;, . ! sowie weitere Zeichen (etwa Steuerzeichen).

• eine Variable des Datentyp char nimmt wegen der 1-Byte-Größe genau1 Zeichenkodierung auf

+ mit dem Datentyp char lassen sich höchstens 256 verschiedeneZeichenkodierungen repräsentieren

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 19 / 32

Page 20: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (5)

• + C-Standard: nimmt als primäre Zeichenkodierung ASCII an

mit ASCII: die ersten 128 Zeichen international festgelegt; während dierestlichen 128 regionale unterschiedliche Bedeutungen haben.

+ ASCII-Codierung einiger Zeichen:• Ziffer 0 . . . 9 : 48D . . . 57D ,• Grossbuchstaben A . . . Z: 65D . . . 90D ,• Kleinbuchstaben a . . . z: 97D . . . 122D

• Wie im Abschnitt über „Konstanten in der Programmiersprache“ gezeigt:

konstante Zeichen: in Hochkommata einschließen: z.B. 'Z'

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 20 / 32

Page 21: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Der Ganzzahl-Typ „char“ (5)

• Beipiel: Ausgabe eines Zeichens statt Ganzzahl:

#include <stdio.h>int main(void){

char c = ’Z’; /* char-Zeichen: ’Z’ */

printf("%c", c); /* Ausgabe: Z, wie erwartet */return 0;

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 21 / 32

Page 22: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Typ char: Interpretation, ob Zahl oder Zeichen? (1)

Merke:

Interpretation,ob der Inhalt einer Variablen des Typs char eine Zahl oder ein Zeichen ist,hat in C durch den Anwender zu erfolgen!

Die beiden letzten Programm-Beispiele zeigen, wie es z.B. für die Ausgabegeht:

• Wert 90 einer char-Variablen als Zahl in Dezimalnotation ausgeben:+ gib bei printf() das Format-Element %d an!

• Wert 90 einer char-Variablen als Zeichen ('Z') ausgegeben:+ gib bei printf() das Format-Element %c an!

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 22 / 32

Page 23: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Typ char: Interpretation, ob Zahl oder Zeichen? (1)Interpretative Spielraum, ob Zahl oder Zeichen, in der C-Programmierung ausnutzbar:Beispiel:

• Zeichen '0',. . . '9' werden durch dezimale Werte 48D . . . 57D kodiert (ASCII)

• häufig will man wissen: wurde eine Ziffer über die Tastur eingegeben?

• Hier ein mühsamer Versuch:

#include <stdio.h>int main(void){

signed char ezei; /* char fuer Eingabe */ezei = getchar(); /* einn Zeichen von Tastur */if (ezei==’0’) /* Ziffer 0 eingegeben*/ {...}else if (ezei==’1’) /* Ziffer 1 eingegeben */else ....else /* Ziffer 9 eingegeben */.....

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 23 / 32

Page 24: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Typ char: Interpretation, ob Zahl oder Zeichen? (2)

Beispiel (Forts.)• Interessiert Tatsache: „Wurde (irgendeine) Ziffer eingegeben?“,

so geht es in C einfacher:

#include <stdio.h>int main(void){

signed char ezei; /* char fuer Eingabe */ezei = getchar(); /* einn Zeichen von Tastur */

if ((’0’<=ezei) && (ezei<=’9’))

{...} /* Ziffer eingegeben */else {...} /* keine Ziffer eingegeben */.....

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 24 / 32

Page 25: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Typ char: Interpretation, ob Zahl oder Zeichen? (3)Beispiel (Forts.)

• Falls allerdings Interesse: „Welche Ziffer wurde eingegeben?“Dann geht das in C etwa so:

#include <stdio.h>int main(void){

signed char ezei; /* char fuer Eingabe */ezei = getchar(); /* einn Zeichen von Tastur */

switch ( ezei - ’0’ ) {case 0 : /* Ziffer 0 eingegeben */ break;case 1 : /* Ziffer 1 eingegeben */ break;.....case 9 : /* Ziffer 9 eingegeben */ break;default: /* keine Ziffer eingegeben! */ break;

}.....

}

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 25 / 32

Page 26: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

• Ganzzahl-Datentyp: logischer Datentyp

(ab C99: _Bool!)

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 26 / 32

Page 27: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Logische Datentype in C: vor C99 und nach C99 (1)

Vor C99:

• Es gab keinen direkten logischen Datentyp!

• Statt dessen:logische Werte wurden vom Programmierer durch ganze Zahlen dargestellt;

• logische Operatoren (!, &&, ||) bzw. logische Ausdrücke (z.B. a < b) gab es in Cschon!

• Das Ergebnis logischer Auswertungen?:z.B. eine Bedingung in if-Anweisung?+ eine ganze Zahl ungleich Null = logischer Wert wahr+ eine ganze Zahl gleich Null = logischer Wert false

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 27 / 32

Page 28: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Logische Datentype in C: vor C99 und nach C99 (2)• Beispiel:

#include <stdio.h>int main(void){

int a = 20, b; /* a, b repr. boolesche Werte *b = !a; /* 0 (=falsch) fuer b,

da "a ungleich 0" (=wahr) ist */a = !b; /* 1 (=wahr) fuer a,

da "b gleich 0" (=falsch) ist */if ( b ) printf("b: true\n");else printf("b: false\n");if ( a ) printf("a: true\n");else printf("a: false\n");return 0;

}

Ausgabe bestätigt dies:

b: falsea: true

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 28 / 32

Page 29: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Logische Datentype in C: vor C99 und nach C99 (2)

Seit C99:

• Ein logischer Datentyp in C eingeführt: (Schlüsselwort) _Bool;

• aber auch diese Datentyp ist ein Ganzzahl-Typ:allerdings nur die Zahlen 0 und 1 ins seinem Wertebereich:0 für false und 1 für true.

• Zusätzlich eingeführt: Header-Datei stdbool.h : definiert• bool als Datentyp _Bool;• Konstante false als 0 und true als 1;

• + gcc (in den aktuellen Versionen) implementiert den C-Datentyp _Bool.

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 29 / 32

Page 30: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Ganzzahl-Datentyp: char

Logische Datentype in C: vor C99 und nach C99 (3)

• Beispiel:

#include <stdio.h>

#include <stdbool.h>

int main(void){bool a = true, b; /* bool ist _Bool! */b = !a;if ( b ) printf("b: true (%d)\n",b);else printf("b: false (%d)\n",b);if ( a ) printf("a: true (%d)\n",a);else printf("a: false (%d)\n",a);return 0;

}

Ausgabe bestätigt dies:b: false (0)a: true (1)

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 30 / 32

Page 31: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Gleitpunkt Datentypen

• Gleitpunkt-Datentypen:

float und double (long double)

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 31 / 32

Page 32: Datentypen in der Programmiersprache C - Schwerpunkt ...+c_ws0809.17-11-2008... · Ganzzahl Datentypen 2-er Komplement-Repräsentation von vorzeichenbehafteten Ganzzahlen • Feststellung:

Gleitpunkt Datentypen

Gleitpunkt-Typen

• Gleitpunkt-Typen:

• einfacher Genauigkeit: float ( 4 Bytes in der Regel);

• doppelte Genauigkeit: double ( 8 Bytes in der Regel), long double (10Bytes in der Regel)

+ Darstellung reeller Zahlen in Form Mantisse und Exponent

+ Später mehr!

R. Spurk (Informatik) Datentypen in der Programmiersprache C WS08/09 32 / 32