5.17 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 Limit-Eigenschaften der Datentypen abfragen – vorausgesetzt, Sie binden die Headerdatei <limits.h> mit ein. Tabelle 5.10 führt die Limits für ganzzahlige Datentypen in der Headerdatei <limits.h> auf:
Konstante | Mindestwert | Erklärung |
CHAR_BIT1) |
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 |
WCHAR_MIN |
implementierungsabhängig |
min. wchar_t |
WCHAR_MAX |
implementierungsabhängig |
max. wchar_t |
MB_LEN_MAX2) |
1 |
max. Byte für ein Multibyte-Zeichen |
SHRT_MIN |
–32767 |
min. short int |
SHRT_MAX |
+32767 |
max short int |
USHRT_MAX |
65535 |
max. unsigned short |
INT_MIN |
–32767 (32 Bit: –2147483647) |
min. int |
INT_MAX |
+32767 (32 Bit: +2147483647) |
max. int |
UINT_MAX |
65535 (32 Bit: 4294967295) |
max. unsigned int |
LONG_MIN |
–2147483647 |
min. long int |
LONG_MAX |
+2147483647 |
max. long int |
ULONG_MAX |
4294967295 |
max. unsigned long int |
LLONG_MIN |
–9223372036854775808 |
min. long long |
LLONG_MAX |
+9223372036854775807 |
max. long long |
ULLONG_MAX |
+18446744073709551615 |
max. unsigned long long |
1) Bei vielen DSPs (digitalen Signalprozessoren) ist CHAR_BIT gleich 16 oder mehr. 2) Wird Unicode verwendet, ist MB_LEN_MAX auf 4 oder mehr gesetzt. |
Benötigen Sie hingegen Limit-Werte 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 von float\n"); printf("----------------------------------\n"); printf("Bytes: %d\n", sizeof(float)); printf("Bit : %d\n", sizeof(float) * CHAR_BIT ); printf("Basis-Exponenten-Darstellung: %d\n", FLT_RADIX); printf("Anzahl Mantissenstellen : %d\n", FLT_MANT_DIG); printf("Anzahl Dezimalziffern : %d\n", FLT_DIG); printf("Kl. neg. FLT_RADIX-Exponent: %d\n", FLT_MIN_EXP); printf("Kl. 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 endl. float-Wert : %f\n", FLT_MAX); printf("Kleinster endl. float-Wert : %f\n", FLT_MIN); return 0; }
Die folgende Tabelle zeigt die Limits und Eigenschaften von Gleitpunktdatentypen, die in der Headerdatei <float.h> deklariert sind:
Konstante | Bedeutung |
FLT_RADIX |
Basis für Exponentendarstellung |
FLT_MANT_DIG |
Anzahl der Mantissenstellen (float) |
DBL_MANT_DIG |
Anzahl der Mantissenstellen (double) |
LDBL_MANT_DIG |
Anzahl der 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 |
minimaler negativer FLT_RADIX-Exponent (float) |
DBL_MIN_EXP |
minimaler negativer FLT_RADIX-Exponent (double) |
LDBL_MIN_EXP |
minimaler negativer FLT_RADIX-Exponent (long double) |
FLT_MIN_10_EXP |
minimaler negativer Zehnerexponent (float) |
DBL_MIN_10_EXP |
minimaler negativer Zehnerexponent (double) |
LDBL_MIN_10_EXP |
minimaler 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 |
minimaler normalisierter Gleitpunktwert (float) |
DBL_MIN |
minimaler normalisierter Gleitpunktwert (double) |
LDBL_MIN |
minimaler normalisierter Gleitpunktwert (long double) |
Natürlich gilt auch bei der Verwendung der Konstanten, die sich in der Headerdatei <float.h> befinden, dass die entsprechende Headerdatei mit eingebunden wird.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.