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.
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.
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
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.
Écrire un programme qui déclare 3 variables a, b et x de type float.
a et b respectivement à 5 et 2a par b avant de mettre le résultat dans xx#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;
}
Écrire un programme qui déclare 3 variables a, b et x de type int
a et b respectivement à 5 et 2a par b avant de mettre le résultat dans xx#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;
}
Les processeurs peuvent réaliser une opération sur ...
Que sera la valeur contenue dans la variable x ?
float x = 15 / 2;
Que sera la valeur contenue dans la variable x ?
float x = 15. / 2.;
Si les deux opérandes sont de types différents, que va-t-il se passer ?
Quand le compilateur convertit automatiquement des opérandes de types différents ...