PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wertebereich von int



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?

Lin728
27-09-2002, 17:47
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?

Lin728
27-09-2002, 19:05
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,
_

f0rtex
28-09-2002, 12:29
/* 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