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 précise son mode de représentation et la taille mémoire nécessaire à son stockage, les opérations qui peuvent lui être appliquées et leur interprétation. Un nom de type sert le plus souvent dans les déclarations. Les seuls opérateurs applicables sur les types sont sizeof pour déterminer sa taille, et l'opérateur 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 représenter les caractères de l'ordinateur. Sa taille est en général de 1 octet. Une valeur de type char est un nombre correspondant au code ASCII) du caractère. Les tailles des autres types sont exprimés en terme de multiples de la taille d'un char, ainsi par définition sizeof(char) vaut 1.

 Le type char peut être, suivant le matériel, 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'arithmétique entière. Il est signé et occupe un mot machine. Sa taille, en général 16 ou 32 bits, dépend 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 déclaration ou l'omission d'une déclaration conduit à une déclaration 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 mémoire comme vecteur de bits. Par contre, il est déconseillé de se servir d'un unsigned à la place d'un int, pour gagner un bit sur un entier positif. En effet, aucun contrôle n'est effectué de la part du compilateur, et pire, des conversions implicites risquent de donner des résultats indésirés.


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 général de tailles respectives 16 et 32 bits, et peuvent se combiner avec unsigned. Ils sont moins dépendants de l'architecture de la machine, leur utilisation donne donc des programmes plus portables.


Constantes

 Une constante entière dont la valeur dépasse le plus grand entier est supposée être de type long, sinon le compilateur considère que les constantes entières sont de type int. Une constante immédiatement suivie de la lettre l (ou L) sera considérée du type long.

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

 Les constates caractères sont considérées comme étant de type int.


Les types float et double


 Le type float est utilisé pour représenter des valeurs à virgule flottante en simple précision. Sa taille est généralement de 32 bits. Le type double représente les valeurs à virgule flottante en double précision. Sa taille est 2*sizeof(float) (soit 64 bits).


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

Constantes

 Les constantes réelles sont considérées comme étant de type double.


Récapitulatif 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 mémoire sans type. Une liste de paramètres formels de type void indique que la fonction n'a pas de paramètre.


Exemple :

void fonction(void); /* procédure n'ayant aucun paramètre */


Les conversions implicites


 On peut mélanger librement les types de base dans les expressions. Le compilateur convertit les valeurs de façon à ce qu'elles ne perdent pas d'information quand cela est possible.


Caractère/entier
  • La conversion d'un caractère en entier se fait par extension du signe à gauche si la source est signée, sinon elle se fait par extension de 0.

  • La conversion d'un entier en entier plus court ou en caractère, 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 signée, sinon elle se fait par extension de 0.

  • Quand un entier non signé et un entier signé sont combinés, ce dernier est converti en entier non signé et le résultat est non signé.
Float/double


 Les conversions entre float et double dépendent de la machine.


Réel/entier
  • Les conversions de valeurs réelles en entiers dépendent de la machine, en particulier en ce qui concerne le sens de la troncature des nombres négatifs. Le résultat est indéfini si la valeur ne tient pas dans l'espace fourni.

  • Les conversions de valeurs entières en réels se comportent normalement, quoiqu'une perte de précision peut avoir lieu si la destination manque de place pour représenter la valeur.


  Retour en haut de page Page suivante