FriconiX
Des milliers de pictogrammes gratuits dessinés avec amour !

Cours 3.3. Le type dans les opérations

Avant d'étudier les autres opérateurs du C, il est important de comprendre que les processeurs ne peuvent réaliser des opérations que sur des variables de même type et de même taille. Lorsque les types sont différents, le compilateur va les convertir (de façon plus ou moins judicieuse) afin qu'au final, le calcul puisse se faire avec deux opérandes de même type. Par exemple : deux short ou deux double.

Pour la même raison, le résultat d'une opération est de même type que les opérandes. Par exemple :

Ce mécanisme peut avoir des conséquences importantes, analysons ces deux exemples.

Exemple 1

Considérons l'exemple suivant :

float a=7, b=2;
printf ("7 / 2 = %f\n", a/b );

Les opérandes a et b sont de type flottant, le résultat de la division sera un flottant, d'où le code de format %f dans le printf. Ici, pas de soucis, le résultat de 7 divisé par 2 est bien 3,5.

Exemple 2

Considérons maintenant l'exemple suivant :

int a=7, b=2;
printf ("7 / 2 = %d\n", a/b );

Les opérandes a et b sont de type entier, le résultat de la division sera également un entier, d'où le code de format %d dans le printf. Mais attention, un entier ne peut pas contenir de nombre décimal, le résultat sera alors tronqué à l'entier inférieur :

7 / 2 = 3
Dans chaque opération, vous devez maîtriser le type des opérandes.

Si les deux opérandes sont de types différents, le compilateur procédera à une conversion de type automatique. Inutile de dire qu'il est préférable d'éviter de laisser le compilateur choisir le type du résultat. Nous verrons plus tard qu'il est possible de caster des variables, c'est à dire les convertir temporairement dans un autre type.

Exercice 1

Écrire un programme qui déclare 3 variables a, b et x de type float.

#include <stdio.h>

int main(void) {
    // Déclare x, a=5 et b=2 de type float
    // COMPLETER ICI

    // Divise a par b => x
    // COMPLETER ICI

    // Affiche x
    printf ("x = %f\n", x);

    return 0;
}

Exercice 2

Écrire un programme qui déclare 3 variables a, b et x de type int

#include <stdio.h>

int main(void) {
    // Déclare x, a=5 et b=2 de type int
    // COMPLETER ICI

    // Divise a par b => x
    // COMPLETER ICI

    // Affiche x
    printf ("x = %d\n", x);

    return 0;
}

Quiz

Les processeurs peuvent réaliser une opération sur ...

Vérifier Bravo ! Les processeurs ne peuvent réaliser des opérations que sur des opérantes de même type. Essaie encore ...

Quelle va être la valeur contenue dans la variable x ?

float x = 15 / 2;
Vérifier Bravo ! Les opérandes sont deux entiers, donc le résultat sera un entier. Essaie encore ...

Quelle va être la valeur contenue dans la variable x ?

float x = 15. / 2.;
Vérifier Bravo ! Les opérandes sont des flottants, donc le résultat est aussi un flottant. Essaie encore ...

Si les deux opérandes sont de types différents, que va-t-il se passer ?

Vérifier Bravo ! Le compilateur a des règles de conversion automatique des types. Essaie encore ...

Quand le compilateur convertit automatiquement des opérandes de types différents ...

Vérifier Bravo ! Même si les régles de transtypage automatiques sont bien faîtes, elle ne produisent pas toujours le résultat espéré. Essaie encore ...

Voir aussi


Dernière mise à jour : 20/09/2021