6. Opérateurs et expressions en С++

• Opérateurs en С++
- Opérateurs arithmétiques
- Opérateurs logiques
- Opérateurs relationnels
- Affectation
- Conversion du type de l'opérande
- Opérateur conditionnel
- Opérateur virgule
• Expressions en C++. Priorité des opérateurs
• Conversion du type implicite
• Exemples et tâches


 
 

• Expressions en C++. Priorité des opérateurs


Une expression est une combinaison d'opérandes /valeurs, constantes, variables, appels de fonctions (standardes ou définies par le programmeur), d'opérateurs et de parenthèses/ ( ) ou [ ] / qui est évaluée pour donner comme résultat une valeur.
L'évaluation d’une expression a lieu selon l'ordre de priorité des opérateurs et les règles associatives.

Tableau 3.
priorité des opérateurs opérateurs règle associative
la plus haute priorité










la plus basse priorité
( ) [ ]
! - ++ -- * & X (type)opérande XX / unaire/
* / %
+ -
<< >>
< > <= >=
= = !=
&&
||
? :
= += -+ *= /= %=
,
de gauche à droite
de droite à gauche
de gauche à droite
de gauche à droite
de gauche à droite
de gauche à droite
de gauche à droite
de gauche à droite
de gauche à droite
de gauche à droite
de droite à gauche
de gauche à droite


Les opérateurs situés à la même ligne ont la priorité égale. Pour les opérateurs unaires ayant une priorité égale, évaluation de droite à gauche. Pour les opérateurs binaires ayant priorité égale, évaluation de gauche à droite. Exception pour les opérateurs =, + = , - = , * =, / =. Ils sont évalués de droite à gauche. Il est préférable, en général, d'utiliser les parenthèses pour rendre explicite l'ordre dans lequel les opérations doivent s'effectuer. Cela facilite la lecture du programme et diminue les erreurs.
Les opérateurs unaires * et & sont utilisés avec des pointeurs.
Les fonctions peuvent être opérandes dans les expressions. Quelques fonctions, le plus souvent utilisées sont données dans le Tableau 4. Pour utiliser ces fonctions dans votre programme, vous devrez placer en en-tête la directive :
#include < math.h >.

Tableau 4.
type de résultat fonction et type du paramètre destination
double
double
double
double
double
double
double
double
double
double
int
double
double
sqrt(double x)
pow(double x, double n)
fabs(double x)
sin(double x)
cos(double x)
tan(double x)
atan(double x)
exp(double x)
log(double x)
log10(double x)
abs(int x )
ceil(double x)
floor(double x)
racine carrée, x >=0
xn
valeur absolue d'un double, | x |
sinus, sin x
cosinus, cos x
tg x
arc tangente, arctg x
exponentielle, ex
logarithme népérien, ln x
logarithme décimal, lg x
valeur absolue d'un int, | x|
arrondit à la valeur supérieure
arrondit à la valeur inférieure

On doit considérer le type du paramètre et le type du résultat d’une fonction. Par exemple, les fonctions
fabs(double x) et abs(int x) donnent des résultats differents:
cout << abs(-5.8); // affiche 5
cout << fabs(-5.8); // affiche 5.8

Quelques fonctions reliées au type
char sont données dans le Tableau5. Elles sont définies dans le fichier ctype.h.

Tableau 5.
type de résultat fonction et type du paramètre destination
int
int
int
int
isalpha( char x)
isdigit( char x)
isupper( char x)
islower( char x)
Si x n'est pas une lettre, résultat 0, sinon - un entier
Si x n'est pas un chiffre, le résultat est 0, sinon - un entier
Si x n'est pas une lettre majuscule, le résultat est 0, sinon - un entier
Si x n'est pas une lettre minuscule, le résultat est 0, sinon - un entier

• Conversion du type implicite

Les expressions peuvent contenir des opérandes de types différents -
int, double, float, bool etc. En langage C++ se fait une conversion automatique de type des opérandes. Sans perte d’information s’exécutent les conversions suivantes:
bool -> int
short int -> int
unsigned short int -> unsigned int
float -> double
Le principe de la conversion implicite est le suivant: du type occupant un plus petit mémoire en type occupant plus de mémoire. Dans ce cas il n’y a pas de perte d’information.