Enrere Mòdul 2
Fonaments de Programació. Llenguatge C/C++---
Pràctica  Resum teòric Exercicis
Pràctica d'ampliació

 
La mida i rang de les variables

En aquesta pràctica comprovarem la mida i rang dels diferents tipus de variables amb l'ús de l'operador sizeof().  

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C++ anomenat m2p02.cc. Escriviu el següent codi:

//m2p02.cc - La mida de les variables -

#include <stdio.h>
#include <limits.h>
#include <float.h>
#include <stdlib.h>

int main(){

system("clear"); // esborra la pantalla
//mida de les variables
printf("mida del tipus char : %d\n",sizeof(char));
printf("mida del tipus short int : %d\n",sizeof(short));
printf("mida del tipus int : %d\n",sizeof(int));
printf("mida del tipus long int : %d\n",sizeof(long));
printf("mida del tipus float : %d\n",sizeof(float));
printf("mida del tipus double : %d\n",sizeof(double));
printf("mida del tipus long double: %d\n",sizeof(long double));
printf("mida del tipus bool : %d\n",sizeof(bool));


printf("\n");

// límits
printf("mínim i màxim de char : %d %d\n",CHAR_MIN, CHAR_MAX);
printf("màxim d'unsigned char : %u\n",UCHAR_MAX);
printf("mínim i màxim de short : %d %d\n",SHRT_MIN, SHRT_MAX);
printf("màxim d'unsigned short : %u\n",USHRT_MAX);
printf("mínim i màxim d'int : %d %d\n",INT_MIN, INT_MAX);
printf("màxim d'unsigned int : %u \n",UINT_MAX);
printf("mínim i màxim de float : %g %g\n",FLT_MIN, FLT_MAX);
printf("mínim i màxim de double : %g %g\n",DBL_MIN, DBL_MAX);
printf("\n");

//mida d'expressions
char c=0;
int i=0;
float f=0;
double d=0;

printf("mida de l'expressió c+i : %d\n", sizeof(c+i));
printf("mida de l'expressió i+f : %d\n", sizeof(i+f));
printf("mida de l'expressió i+d : %d\n", sizeof(i+d));
printf("mida de l'expressió f+d : %d\n", sizeof(f+d));
return 0;
}

Captura de l'execució del programa.

 

 

Explicació del programa

 

Aquest senzill programa no necessita massa explicacions. És una comprovació de la mida real en octets que ocupa cada tipus de variable. Això es fa amb l'operador sizeof(). sizeof()  és un operador de C/C++ i no una funció. No té cap declaració en cap arxiu capçalera. De totes formes es comporta com una funció que admet com argument el nom d'una variable, un tipus de variable o bé una expressió i torna un enter que correspon al nombre d'octets que ocupa la variable, tipus o expressió. El resultat podria ser diferent en compiladors diferents. El resultat en el nostre entorn  és el següent:

 

mida del tipus char        :1
mida del tipus short int   :2
mida del tipus int         :4
mida del tipus long int    :4
mida del tipus float       :4

mida del tipus double      :8

mida del tipus long double :12

mida del tipus bool        :1

 

mínim i màxim de char   :-128 127

màxim d'unsigned char   :255
mínim i màxim de short  :-32768 32767
màxim d' unsigned short  :65535
mínim i màxim d'int     :-2147483648 2147483647
màxim d' unsigned int    :4294967295
mínim i màxim de float  :1.17549e-038 3.40282e038
mínim i màxim de double :2.22507e-308 1.79769e308

mida de l'expressió c+i    :4

mida de l'expressió i+f    :4

mida de l'expressió i+d    :4

mida de l'expressió f+d    :8

 

 

Els modificadors signed i unsigned no afecten a la mida de les variables.

L'operador sizeof() és útil si es volen fer programes "portables", és a dir, que es puguin compilar en diferents compiladors. S'ha de tenir en compte que les variables del tipus int, per exemple, que ocupen 4 octets, en compiladors sota sistemes operatius de 16 bits ocupen 2 octets. L'ús de modificadors com long, que poden semblar redundants, asseguren també la portatibitat dels programes.

 

El tipus bool és una novetat del Visual C++ des de la versió 5.0. Aquest tipus de variable només pot contenir dos valors: true (1) i false (0) i ocupen 1 octet. Aquestes variables se solen utilitzar per a les condicions de les sentències condicionals, no obstant això, C i C++ permeten l'ús de qualsevol expressió numèrica en les expressions condicionals.

 

En la segona part del programa es mostra els valors mínims i màxims dels diferents tipus. Per visualitzar aquests valors s'han fet ús d'unes MACROS o constants predefinides. Aquestes MACROS estan definides en els arxius capçalera limits.h i float.h. S'han d'incloure tots dos arxius per tal de poder usar totes aquestes MACROS.

 

En la tercera part del programa es pot comprovar les conversions automàtiques entre tipus. L'expressió: c + i és la suma de dues variables, una del tipus char i una altra del tipus int, el resultat de l'expressió és un valor del tipus int. Sempre que es barregin dues dades (variables o constants) de tipus diferents en una mateixa expressió, les dades promocionen a dades de tipus superior segons el següent ordre:

 

bool ->char -> int -> unsigned int -> long -> unsigned long -> float -> double -> long double

 

En aquest programa, la declaració de les variables c,i,f,d no es fa al començament de la funció main(). Si aquest programa es compilés en un compilador ANSI C donaria un error. En ANSI C,  totes les variables s'han de declarar abans de qualsevol altra sentència. C++ permet que les variables es puguin declarar en qualsevol part del programa. La pràctica habitual és declarar totes les variables al començament. Només s'ha de fer servir aquesta característica de C++ si el codi guanya significantment en comprensió.