Cours langage C++ les opérateurs standard, tutoriel & guide de travaux pratiques en pdf.
Opérateurs arithmétiques et logiques
Addition +, Soustraction -, Multiplication *, Division /
Ces opérateurs peuvent prendre comme arguments des entiers ou des réels, et fournissent un résultat entier si les deux opérandes sont entiers, réel dans le cas contraire. Dans le cas de la division entière, le résultat sera tronqué.
int i, j, k; i = 3; j = 5; k = i + j; // k == 8 i = k * i; // i == 24 j = i / j; // j == 4 j = i – j; // j == 20
Modulo %
Cet opérateur retourne le reste de la division entière. Il ne peut être utilisé que pour des nombres entiers.
int j; cout<<“Entrer un nombre entier “; cin>>j; cout<<endl; if (j % 2) cout<<j<<“ est un nombre impair”; else cout<<j<<“ est un nombre pair”; cout<<endl;
Egalité ==
L’égalité se teste par l’opérateur ==.
int a, b; a = b = 3; if (a == b) cout<<“Nous avons verifie une evidence”<<endl; else cout<<“L’informatique n’est plus ce qu’elle etait…”<<endl;
Une faute souvent commise est de tester une valeur au moyen de l’opérateur = (habitude en provenance d’autres langages). Or, si dans beaucoup de cas, le compilateur acceptera le test, le résultat ne sera pas celui attendu :
int a; …. if (a = 3) { … faire quelque chose… }
Ce qui est exécuté effectivement, c’est que a se voit assigner la valeur 3. Comme de surcroît, l’opérateur d’affectation (cf “Affectation simple =”, page108) retourne une valeur, dans ce cas entière, et que les booléens sont implémentés par des entiers en C++, le compilateur se trouve satisfait. Le code correct devrait être :
int a; …. if (a == 3) // Test logique d’égalité { … faire quelque chose… }
Certains compilateurs émettent un warning dans ce genre de situation (SiemensNixdorf, par exemple). Pour supprimer ce warning dans le cas où l’assignation est effectivement le but recherché, on écrira : int a; …. if ((a = 3)) // Assignation, puis test logique != 0 { … faire quelque chose… }
Comparaisons (>, >=, <, <=)
La signification de ces opérateurs est relativement aisée à comprendre et ne comporte pas de difficultés particulières.
int a, b, c; a = 3; b = 4; c = 5; if (b++ < c) { cout<<b<<“ est inferieur a “<<c<<endl; // Imprime : 5 est inferieur a 5 (effet de bord !!!) } if (b >= a) { cout<<b<<“ est superieur ou egal a “<<a<<endl; // Imprime : 5 est superieur ou egal a 3 }
Les opérateurs de comparaison, tout comme l’opérateur de test d’égalité, ont une valeur de retour de type entier.
Opérateurs logiques (&&, ||)
Ces opérateurs correspondent au ET logique (&&, AND) et au OU logique (||, OR). Ces
opérateurs évaluent d’abord l’opérande de gauche, puis celui de droite. Si la valeur de l’opérande de gauche rend toute possibilité de succès ( = TRUE) du résultat impossible, alors le membre de droite n’est pas évalué.
Cette non-évaluation peut dans certains cas provoquer des erreurs difficiles à cerner, en particulier si l’on fait usage d’effets de bord. L’effet de bord aura lieu ou non en fonction des variables impliquées dans l’opération. On ne peut que répéter que les effets de bord doivent être utilisés avec parcimonie, dans la mesure où on les utilises..