Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C

L e s   t y p e s   d e   b a s e






 Le type d'un identificateur prcise son mode de reprsentation et la taille mmoire ncessaire son stockage, les oprations qui peuvent lui tre appliques et leur interprtation. Un nom de type sert le plus souvent dans les dclarations. Les seuls oprateurs applicables sur les types sont sizeof pour dterminer sa taille, et l'oprateur de conversion cast qui convertit une expression en un autre type.


Les types char, signed char et unsigned char


 Le type char est utilis pour reprsenter les caractres de l'ordinateur. Sa taille est en gnral de 1 octet. Une valeur de type char est un nombre correspondant au code ASCII) du caractre. Les tailles des autres types sont exprims en terme de multiples de la taille d'un char, ainsi par dfinition sizeof(char) vaut 1.

 Le type char peut tre, suivant le matriel, soit sign, soit non sign.

 Le type signed char est toujours sign, unsigned char toujours non sign. Leur emploi donne donc des programmes plus portables :


 Exemple : char c = 'a'


Les types int, unsigned int, short et long


 Le type int convient l'arithmtique entire. Il est sign et occupe un mot machine. Sa taille, en gnral 16 ou 32 bits, dpend du processeur utilis.


Exemple : int cpt, nombreMots = 0, i = -123;


 Le type int est le type implicite en C : dans certains cas, l'omission du type dans une dclaration ou l'omission d'une dclaration conduit une dclaration implicite de type int.

unsigned est quivalent unsigned int, short short int, et long long int.


Exemple :

static x; /* x est de type int */
const y = 11;    /* y est de type int */


 Le type unsigned int, de taille identique, est non sign. Il est utile pour traiter la mmoire comme vecteur de bits. Par contre, il est dconseill de se servir d'un unsigned la place d'un int, pour gagner un bit sur un entier positif. En effet, aucun contrle n'est effectu de la part du compilateur, et pire, des conversions implicites risquent de donner des rsultats indsirs.


Exemple :

unsigned u = -1; /* Initialise u avec la valeur 65535 si la taille d'un int est de 16 bits */


 Les types short et long sont galement des types entiers en gnral de tailles respectives 16 et 32 bits, et peuvent se combiner avec unsigned. Ils sont moins dpendants de l'architecture de la machine, leur utilisation donne donc des programmes plus portables.


Constantes

 Une constante entire dont la valeur dpasse le plus grand entier est suppose tre de type long, sinon le compilateur considre que les constantes entires sont de type int. Une constante immdiatement suivie de la lettre l (ou L) sera considre du type long.

 450000, 07L, 0x0FFFl sont des constantes de type long.

 Les constates caractres sont considres comme tant de type int.


Les types float et double


 Le type float est utilis pour reprsenter des valeurs virgule flottante en simple prcision. Sa taille est gnralement de 32 bits. Le type double reprsente les valeurs virgule flottante en double prcision. Sa taille est 2*sizeof(float) (soit 64 bits).


Exemple :
float angle, x, rayon;
double distance = 254.5;

Constantes

 Les constantes relles sont considres comme tant de type double.


Rcapitulatif des tailles de chaque type

 
Mot machine 16 bits
Mot machine 32 bits
char
8 bits
8 bits
short
16 bits
16 bits
int
16 bits
32 bits
long
32 bits
32 bits
float
32 bits
32 bits
double
64 bits
64bits


Le type void


 Le type void indique un ensemble vide de valeur.

 Une fonction de type void ne renvoie pas de valeur. Un pointeur sur un type void pointe sur une zone mmoire sans type. Une liste de paramtres formels de type void indique que la fonction n'a pas de paramtre.


Exemple :

void fonction(void); /* procdure n'ayant aucun paramtre */


Les conversions implicites


 On peut mlanger librement les types de base dans les expressions. Le compilateur convertit les valeurs de faon ce qu'elles ne perdent pas d'information quand cela est possible.


Caractre/entier
  • La conversion d'un caractre en entier se fait par extension du signe gauche si la source est signe, sinon elle se fait par extension de 0.

  • La conversion d'un entier en entier plus court ou en caractre, tronque la valeur gauche et les bits en trop sont perdus.

  • La conversion d'un entier en entier plus long se fait par extension du signe gauche si la source est signe, sinon elle se fait par extension de 0.

  • Quand un entier non sign et un entier sign sont combins, ce dernier est converti en entier non sign et le rsultat est non sign.
Float/double


 Les conversions entre float et double dpendent de la machine.


Rel/entier
  • Les conversions de valeurs relles en entiers dpendent de la machine, en particulier en ce qui concerne le sens de la troncature des nombres ngatifs. Le rsultat est indfini si la valeur ne tient pas dans l'espace fourni.

  • Les conversions de valeurs entires en rels se comportent normalement, quoiqu'une perte de prcision peut avoir lieu si la destination manque de place pour reprsenter la valeur.


  Retour en haut de page Page suivante