axeljaeger
27-09-2002, 17:14
Ich brauche den genauen Wertebreich einer int-variable. Das mus man ja berechnen können, nur wie? Ich hab mir sowas ausgedacht:
int size = math.pow(2, sizeof(int) * 8);
Hat jmd. eine bessere Idee?
Normalerweise kannst du dir die möglichen zahlen so ausrechnen:
sizeOf(int) //Lie
(4. Zahl)*(2hoch3)+(3.Zahl)*(2hoch2)....bis 2hochnull
axeljaeger
27-09-2002, 18:20
(4. Zahl)*(2hoch3)+(3.Zahl)*(2hoch2)....bis 2hochnull
Das verstehe ich jetzt nicht. Geht das nicht einfach
2 ^ Bitzahl? Udd die Bitzahl kriegt man mit sizeof(int) * 8?
Soweit ich weiß, gibt es einen Header limits.h (unter C++ einfach limits), wo die ganzen platformabhängigen Konstatne definiert sind.
anda_skoa
28-09-2002, 10:40
Original geschrieben von ceisserer
Hmm, in C hat int den Werteberech 0....65536 oder das ganze halt durch zwei und ein minus davor.
Auf 32Bit Plattformen und allen 64 Bit Plattformen die ich kenne, ist int 32 Bit lang.
axeljaeger hat schon recht, berechnen kann man den Wertebreich mit
(2 hoch (anzahl der bits))-1 für unsigned
und für signed
-((2 hoch (anzahl bits))/2)-1) bis (2 hoch (anzahlbits))/2
In C kann man wie ceisserer geschrieben hat, den jeweiligen Wert auch aus limits.h holen.
Ciao,
_
/* A program to print out various machine-dependent constants */
/* Michael Ashley / UNSW / 04-May-1994 */
#include <stdio.h> /* for printf definition */
#include <limits.h> /* for CHAR_MIN, CHAR_MAX, etc */
#include <float.h> /* for FLT_DIG, DBL_DIG, etc */
main () {
printf ("char %d bytes %d to %d \n", sizeof(char ), CHAR_MIN, CHAR_MAX );
printf ("unsigned char %d bytes %d to %d \n", sizeof(unsigned char ), 0 , UCHAR_MAX );
printf ("short %d bytes %hi to %hi \n", sizeof(short ), SHRT_MIN, SHRT_MAX );
printf ("unsigned short %d bytes %hu to %hu \n", sizeof(unsigned short), 0 , USHRT_MAX );
printf ("int %d bytes %i to %i \n", sizeof(int ), INT_MIN , INT_MAX );
printf ("unsigned int %d bytes %u to %u \n", sizeof(unsigned int ), 0 , UINT_MAX );
printf ("long %d bytes %li to %li \n", sizeof(long ), LONG_MIN, LONG_MAX );
printf ("unsigned long %d bytes %lu to %lu \n", sizeof(unsigned long ), 0 , ULONG_MAX );
printf ("float %d bytes %e to %e \n", sizeof(float ), FLT_MIN , FLT_MAX );
printf ("double %d bytes %e to %e \n", sizeof(double ), DBL_MIN , DBL_MAX );
printf ("long double %d bytes \n", sizeof(long double ), LDBL_MIN, LDBL_MAX );
printf ("precision of float %d digits\n", FLT_DIG);
printf ("precision of double %d digits\n", DBL_DIG);
printf ("precision of long double %d digits\n", LDBL_DIG);
}
MfG
f0rtex
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.