7.11 Limits für Ganzzahl- und Gleitpunktdatentypen
 
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.
|