Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 7 Elementare Datentypen
  gp 7.1 Der Datentyp int (Integer)
  gp 7.2 Variablen deklarieren
    gp 7.2.1 Erlaubte Bezeichner
  gp 7.3 C versus C++ bei der Deklaration von Variablen
  gp 7.4 Der Datentyp long
  gp 7.5 Der Datentyp short
  gp 7.6 Die Gleitpunkttypen float und double
    gp 7.6.1 Gleitpunkttypen im Detail
    gp 7.6.2 float im Detail
    gp 7.6.3 double im Detail
    gp 7.6.4 long double
    gp 7.6.5 Einiges zu n-stelliger Genauigkeit
  gp 7.7 Numerische Gleitpunktprobleme
  gp 7.8 Der Datentyp char
  gp 7.9 Nationale contra internationale Zeichensätze
  gp 7.10 Vorzeichenlos und vorzeichenbehaftet
  gp 7.11 Limits für Ganzzahl- und Gleitpunktdatentypen
  gp 7.12 Konstanten
    gp 7.12.1 Ganzzahlkonstanten
    gp 7.12.2 Gleitpunktkonstanten
    gp 7.12.3 Zeichenkonstanten
    gp 7.12.4 String-Literale (Stringkonstante)
  gp 7.13 Umwandlungsvorgaben für formatierte Ein–/Ausgabe


Galileo Computing - Zum Seitenanfang

7.11 Limits für Ganzzahl- und Gleitpunktdatentypen  toptop

Jetzt haben Sie eine Menge über Datentypen und ihre Eigenschaften erfahren. Häufig hieß es jedoch, auf bestimmten Systemen hat Datentyp x die Größe y. Wenn Sie jetzt erfahren wollen, welchen maximalen oder minimalen Wert der Datentyp int z.B. auf Ihrem System besitzt, können Sie die Konstanten in den Standard-Headerdateien <limits.h> und <float.h> abfragen bzw. ausgeben. Mit folgendem Listing ist es möglich, alle Limits des Datentyps int auf Ihrem System abzufragen:

/* int_limit.c */
#include <stdio.h>
#include <limits.h>
int main(void) {
   printf("int-Wert mindestens : %d\n", INT_MIN);
   printf("int-Wert maximal    : %d\n", INT_MAX);
   printf("unsigned int max.   : %u\n", UINT_MAX);
   printf("int benötigt %d Byte (%d Bit) Speicher\n",
      sizeof(int), sizeof(int) * CHAR_BIT);
   return 0;
}

Genauso wie in diesem Beispiel können Sie auch die anderen Limiteigenschaften der Datentypen abfragen. Vorausgesetzt, Sie binden die Headerdatei <limits.h> mit ein. Hierzu die Tabelle der Limits für ganzzahlige Datentypen in der Headerdatei <limits.h>:


Tabelle 7.7   Limit-Konstanten für ganzzahlige Datentypen in <limits.h>

Konstante Mindestwert Erklärung
CHAR_BIT 8 Bitzahl für ein Byte
SCHAR_MIN –127 min. signed char
SCHAR_MAX +127 max. signed char
UCHAR_MAX 255 max. unsigned char
CHAR_MIN SCHAR_MIN oder 0 min. char
CHAR_MAX SCHAR_MAX oder UCHAR_MAX max. char
MB_LEN_MAX 1 max. Byte für ein Viel-Bytezeichen
SHRT_MIN –32767 min. short int
SHRT_MAX +32767 max short int
USHRT_MAX 65535 max. unsigned short
INT_MIN –32767 (32Bit: –2147483647) min. int
INT_MAX +32767 (32Bit: +2147483647) max. int
UINT_MAX 65535 (32Bit: 4294967295) max. unsigned int
LONG_MIN –2147483647 min. long int
LONG_MAX +2147483647 max. long int
ULONG_MAX 4294967295 max. unsigned long int

Benötigen Sie hingegen Limitwerte für Gleitpunktzahlen, gibt die Headerdatei <float.h> Auskunft. Darin finden Sie u.a. Konstanten mit allen Limits und Eigenschaften, die für Gleitpunktdatentypen entscheidend sind. Das folgende Listing gibt alle Limits und Eigenschaften für den Datentyp float auf Ihrem System aus:

/* float_limit.c */
#include <stdio.h>
#include <float.h>
#include <limits.h> //für CHAR_BIT
int main(void) {
   printf("Limits und Eigenschaften des float-Wertes\n\n");
   printf("float benötigt %d Bytes (%d Bit) an Speicherplatz\n",
      sizeof(float), sizeof(float) * CHAR_BIT);
   printf("Basis für Exponentendarstellung: %d\n", FLT_RADIX);
   printf("Anzahl der Mantissenstellen    : %d\n", FLT_MANT_DIG);
   printf("Anzahl sign. Dezimalziffern    : %d\n", FLT_DIG);
   printf("Kleinst. neg. FLT_RADIX-Exponent: %d\n", FLT_MIN_EXP);
   printf("Kleinst. neg. Zehnerexponent : %d\n", FLT_MIN_10_EXP);
   printf("Größter FLT_RADIX-Exponent     : %d\n", FLT_MAX_EXP);
   printf("Größter Zehnerexponent       : %d\n", FLT_MAX_10_EXP);
   printf("Größter endlicher float-Wert   : %f\n", FLT_MAX);
   printf("Kleinster endlicher float-Wert : %f\n", FLT_MIN);
   return 0;
}

Auch hierzu eine Tabelle mit den Limits und Eigenschaften von Gleitpunktdatentypen, welche in der Headerdatei <float.h> deklariert sind:


Tabelle 7.8   Limit-Konstanten für Gleitpunkt-Datentypen in <float.h>

Konstante Bedeutung
FLT_RADIX Basis für Exponentendarstellung
FLT_MANT_DIG Anzahl Mantissenstellen (float)
DBL_MANT_DIG Anzahl Mantissenstellen (double)
LDBL_MANT_DIG Anzahl Mantissenstellen (long double)
FLT_DIG Genauigkeit in Dezimalziffern (float)
DBL_DIG Genauigkeit in Dezimalziffern (double)
LDBL_DIG Genauigkeit in Dezimalziffern (long double)
FLT_MIN_EXP Minimalster negativer FLT_RADIX-Exponent (float)
DBL_MIN_EXP Minimalster negativer FLT_RADIX-Exponent (double)
LDBL_MIN_EXP Minimalster negativer FLT_RADIX-Exponent (long double)
FLT_MIN_10_EXP Minimalster negativer Zehnerexponent (float)
DBL_MIN_10_EXP Minimalster negativer Zehnerexponent (double)
LDBL_MIN_10_EXP Minimalster negativer Zehnerexponent (long double)
FLT_MAX_EXP Maximaler FLT_RADIX-Exponent (float)
DBL_MAX_EXP Maximaler FLT_RADIX-Exponent (double)
LDBL_MAX_EXP Maximaler FLT_RADIX-Exponent (long double)
FLT_MAX_10_EXP Maximaler Zehnerexponent (float)
DBL_MAX_10_EXP Maximaler Zehnerexponent (double)
LDBL_MAX_10_EXP Maximaler Zehnerexponent (long double)
FLT_MAX Maximaler Gleitpunktwert (float)
DBL_MAX Maximaler Gleitpunktwert (double)
LDBL_MAX Maximaler Gleitpunktwert (long double)
FLT_EPSILON Kleinster float-Wert x für den 1.0 + x ungleich 1.0 gilt
DBL_EPSILON Kleinster double-Wert x für den 1.0 + x ungleich 1.0 gilt
LDBL_EPSILON Kleinster long double-Wert x für den 1.0 + x ungleich 1.0 gilt
FLT_MIN Minimalster normalisierter Gleitpunktwert (float)
DBL_MIN Minimalster normalisierter Gleitpunktwert (double)
LDBL_MIN Minimalster normalisierter Gleitpunktwert (long double)

Natürlich gilt auch bei der Verwendung der Konstanten, welche sich in der Headerdatei <float.h> befinden, dass die entsprechende Headerdatei mit eingebunden wird.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de