Langage C++/Opérateurs

Une page de Wikiversité.

Computer-aj aj ashton 01.svg

Langage C++/Opérateurs est une ébauche concernant l'informatique. Vous pouvez aider le projet Wikiversité en l'améliorant.


Opérateurs
Computer-aj aj ashton 01.svg
Chapitre 4
Leçon : Langage C++
Chap. préc. : Types
Chap. suiv. : Syntaxe C++
Icon falscher Titel.svg

En raison de limitations techniques, la typographie souhaitable du titre, « Langage C++ : Opérateurs
Langage C++/Opérateurs
 », n'a pu être restituée correctement ci-dessus.

Sommaire

[modifier] Les Opérateurs C++

Les opérateurs sont des symboles permettant d'effectuer des opérations sur des valeurs. Ils sont classés dans 3 catégories.


[modifier] Opérateurs d'affectation

[modifier] L'opérateur d'affectation simple "="

L'opérateur d'affectation simple est "=" il signifie "affecter à".

Syntaxe:

<Destination> = <Source>; Où <Source> et <Destination> doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5; //x = 5
y = 3; //y = 3
x = y; //x = 3 (valeur de y)

[modifier] L'opérateur d'affectation additionneur "+="

L'opérateur d'affectation additionneur est "+=" il signifie "affecter en additionant à".

Syntaxe:

<Destination> += <Source>; Où <Source> et <Destination> doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5;
y = 3;
x += y; //x = 8

[modifier] L'opérateur d'affectation soustracteur "-="

L'opérateur d'affectation soustracteur est "-=" il signifie "affecter en soustrayant à".

Syntaxe:

<Destination> -= <Source>; Où <Source> et <Destination> doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5;
y = 3;
x -= y; //x = 2

[modifier] L'opérateur d'affectation multiplicateur "*="

L'opérateur d'affectation multiplicateur est "*=" il signifie "affecter en multipliant à".

Syntaxe:

<Destination> *= <Source>; Où <Destination> et le résultat de l'opération doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5;
y = 3;
x *= y; //x = 15

[modifier] L'opérateur d'affectation diviseur "/="

L'opérateur d'affectation diviseur est "/=" il signifie "affecter en divisant à".

Syntaxe:

<Destination> /= <Source>; Où <Destination> et le résultat de l'opération doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5;
y = 3;
x /= y; //x = 1 (voir l'opérateur "/")

[modifier] L'opérateur d'affectation modulo "%="

L'opérateur d'affectation modulo est "%=" il signifie "affecter le modulo de, à".

Syntaxe:

<Destination> %= <Source>; Où <Destination> et le résultat de l'opération doivent être de même nature et où <Source> est une expression et <Destination> une variable;


Exemple

int x, y;
x = 5;
y = 3;
x %= y; //x = 2 (voir l'opérateur "%")


[modifier] Les opérateurs mathématiques

[modifier] Opérateur d'addition "+"

L'opérateur permettant l'addition est "+" il permet d'additionner un nombre ou le résultat numérique d'une expression à un autre.


Exemple

int x, y, z;
x = 5;
y = 3;
z = x + y; //z = 8

[modifier] Opérateur de soustraction "-"

L'opérateur permettant la soustraction est "-" il permet de soustraire un nombre ou le résultat numérique d'une expression à un autre.


Exemple

int x, y, z;
x = 5;
y = 3;
z = x - y; //z = 2

[modifier] Opérateur de multiplication "*"

L'opérateur permettant la multiplication est "*" il permet de multiplier un nombre ou le résultat numérique d'une expression à un autre.


Exemple

int x, y, z;
x = 5;
y = 3;
z = x * y; //z = 15

[modifier] Opérateur de division "/"

L'opérateur permettant la division est "/" il permet de diviser un nombre ou le résultat numérique d'une expression à un autre.


Exemple

int x, y, z;
x = 5;
y = 3;
z = x / y; //z = 1
float r, o, p;
r = 5.0;
o = 3.0;
p = r / o; // p ~= 1.666666…

(En c++ la division est entière si les 2 opérandes sont entiers. Si l'un des opérandes est codé sur un format réel alors le résultat sera réel.)

[modifier] Opérateur de modulo "%"

L'opérateur permettant de récupérer le reste de la division entière d'un nombre ou du résultat numérique d'une expression par un autre, est "%".


Exemple

int x, y, z;
x = 5;
y = 3
z = x % y; // = 2 (5 / 3 => quotient 1, reste 2)

[modifier] Les opérateurs comparatifs

Ils servent essentiellement à effectuer des tests logiques entre plusieurs valeurs numériques.


[modifier] Comparateur d'égalité "=="

Le comparateur C++ d'égalité == permet de vérifier si la valeur de gauche est strictement égale à la valeur de droite.

Cela revient à faire une inversion de l'opérateur logique XOR (soit NOT XOR). Voici la table de vérité du comparateur == pour l'opération (x == y) :


== (NOT XOR) y = false y = true
x = false true false
x = true false true


[modifier] Comparateur "!=" (différent de)

Le comparateur C++ différentiel "!=" permet de vérifier si la valeur de gauche est strictement différente de la valeur de droite. Cela revient à appliquer l'opérateur logique XOR.


[modifier] Comparateur "<" (strictement inférieur à) :

Le comparateur "<" (strictement inférieur à) permet de vérifier si la valeur numérique de gauche est strictement inférieure à la valeur numérique de droite. Cet opérateur renvoie true uniquement si la valeur numérique de gauche est strictement inférieure à la valeur numérique de droite.


[modifier] Comparateur "<=" (inférieur à) :

Le comparateur "<=" (inférieurs à) permet de vérifier si la valeur numérique de gauche est inférieure ou égale à la valeur numérique de droite. Cet opérateur renvoie true uniquement si la valeur numérique de gauche est inférieure ou égale à la valeur numérique de droite.


[modifier] Comparateur ">=" (supérieur à) :

Le comparateur "<=" (supérieur à) permet de vérifier si la valeur numérique de gauche est supérieure ou égale à la valeur numérique de droite. Cet opérateur renvoie true uniquement si la valeur numérique de gauche est supérieure ou égale à la valeur numérique de droite.


[modifier] Comparateur ">" (Strictement supérieur à) :

Le comparateur ">" (Strictement supérieur à) permet de vérifier si la valeur numérique de gauche est strictement supérieure à la valeur numérique de droite. Cet opérateur renvoie true uniquement si la valeur numérique de gauche est strictement supérieure à la valeur numérique de droite.


[modifier] Opérateurs logiques

Les opérateurs logiques représentent les manipulations et comparaisons possibles que l'on peut faire sur des données de types booléen et/ou binaire.

Nuvola apps important.svg Attention : les opérateurs &, | et ^ sont des opérateurs bit à bit ! Les opérateurs logiques correspondant au & et au | sont respectivement && et ||.


[modifier] Les opérateurs logiques

Cette sous-catégorie représente les opérateurs logiques que nous avons vu en introduction en leur spécifiant une syntaxe. Il est à noter que l'opérateur logique YES n'a pas de représentation en C++. En effet le C++ utilise le postulat que les opérations doivent retourner "true" pour être vrai. Partant de ce principe il n'est plus nécessaire d'avoir un opérateur YES.


[modifier] Opérateur "!" (NOT)

L'opérateur logique inverseur "NOT" a pour syntaxe en C++ le symbole "!" (point d'exclamation). Pour inverser une valeur on écrira donc en C++


Exemple

bool x, y;
x = true;
y = !x; // y = false
[modifier] Opérateur "&&" (AND)

Le comparateur C++ AND "&&" permet de vérifier si les 2 valeurs soumises sont vraies. Ce comparateur est souvent utilisé dans les tests car il permet une optimisation du code. Contrairement à l'opérateur logique "&" le comparateur "&&" teste la première valeur et si elle est false il renvoie directement false sans tester la deuxième valeur. Ce comportement permet un gain de temps sur les procédures de comparaison et permet d'éviter l'exécution d'un code qui serait invalide si le test de la première valeur renvoyait false.


Exemple

bool x = true, y = true, z = false;
bool a, b, c;
a = x && y; // a = true
b = x && z; // b = false
c = x && !z; // c = true
[modifier] Opérateur "||" (OR)

Le comparateur C++ OR "||" permet de vérifier si au moins une des valeurs soumises est vraie. Ce comparateur est souvent utilisé dans les tests car il permet une optimisation du code. Contrairement à l'opérateur logique "|", le comparateur "||" teste la première valeur, et si elle est à vrai, il renvoie directement true sans tester la deuxième valeur. Ce comportement permet un gain de temps sur les procédures de comparaison et permet d'éviter l'exécution d'un code qui serait invalide si le test de la première valeur renvoyait vrai.

[modifier] Opérateurs bit à bit

Les opérateurs bit à bit travaillent sur les variables en s'appliquant bit à bit.

[modifier] Opérateur "&" (AND)

L'opérateur AND a pour syntaxe en C++ le symbole "&" (l’esperluette ou et commercial). Pour effectuer un AND sur des valeurs on écrira donc en C++


Exemple

int a = 2, b = 6, c = 12, d, e;
d = a & b ; // d = 2
e = b & c ; // e = 4
[modifier] Opérateur "|" (OR)

L'opérateur OR a pour syntaxe en C++ le symbole "|" (la barre verticale). Pour effectuer un OR sur des valeurs on écrira donc en C++


Exemple

int a = 2, b = 6, c = 12, d, e;
d = a | b ; // d = 6
e = b | c ; // e = 14
[modifier] Opérateur "^" (XOR)

L'opérateur XOR a pour syntaxe en C++ le symbole "^" (Accent circonflexe). Pour effectuer un XOR sur des valeurs on écrira donc en C++


Exemple

int a = 2, b = 6, c = 12, d, e, f;
d = a ^ b ; // d = 4
e = a ^ a ; // e = 0
f = a ^ c ; // f = 10
[modifier] Opérateur "~" (NOT)

L'opérateur NOT a pour syntaxe en C++ le symbole "~" (tilde). Pour effectuer un NOT sur des valeurs on écrira donc en C++


Exemple

int a = 2, b = -6, c = 0;
a = ~a ; // a = -3
b = ~b ; // b = 5
c = ~c ; // c = -1


[modifier] Opérateurs Monadiques

En c++ il existe des opérateurs qui ne nécessitent qu'une opérande. Il sont appelé opérateurs Monadique.


[modifier] Opérateurs "++" (incrémentation)

L'opérateur "++" est un peu particulier car il possède 2 formes et des effets indésirables. Je n'en parle que pour vous permettre d'éviter les cas problématiques.


[modifier] Forme préfixée

Dans sa forme préfixée la théorie veux que l'opérande associé soit d'abord incrémenté puis renvoyé.


Définition

Syntaxe:
++<operande>

Où operande est la valeur à incrémenter puis à renvoyer.

[modifier] Forme suffixée

Dans sa forme suffixée la théorie veut que l'opérande associé soit d'abord renvoyé puis incrémenté.


Définition

Syntaxe:
<operande>++

Où operande est la valeur à renvoyer puis à incrémenter.

[modifier] Opérateurs "--" (décrémentation)

L'opérateur "--" est un peu particulier car il possède 2 formes et des effets indésirables. Je n'en parle que pour vous permettre d'éviter les cas problématiques.

[modifier] Forme préfixée

Dans sa forme préfixée la théorie veux que l'opérande associé soit d'abord décrémenté puis renvoyé.


Définition

Syntaxe:
--<operande>

Où operande est la valeur à décrémenter puis à renvoyer.

[modifier] Forme suffixée

Dans sa forme suffixée la théorie veut que l'opérande associé soit d'abord renvoyé puis décrémenté.


Définition

Syntaxe:
<operande>--

Où operande est la valeur à renvoyer puis à décrémenter.

[modifier] Effets secondaires "Effets de bords"

En C++ un effet de bord est un effet secondaire introduit par les créateurs du langage, soit disant, dans un soucis d'optimisation. Le fait est que si l'on utilise les opérateurs monadiques ou d'affectation d'une certaine manière le résultat est indéterminé par les spécifications du langage. Ce qui veut dire que le compilateur fait ce qu'il veut. En fait ce problème survient car l'opérateur lit et modifie la valeur de ses opérandes.


Exemple

int a = 0;
 
++a = a++; // <-- résultat indéterminé

Dans ce cas, "a" peut valoir 1 ou 2 selon comment le compilateur a traité les opérateurs. Autre exemple


Exemple

int a = 0;
 
a = a++ + ++a + a++; // <-- résultat indéterminé

Dans ce cas, "a" peut valoir 0, 1 ou 3 selon comment le compilateur a traité les opérateurs.

autre exemple :


Exemple

int a = 0;
int b = 5;
printf("%d, %d", a++, a = --b); // <-- résultat indéterminé

Ici l'affichage peut avoir bien des valeurs.

Il est donc recommandé en C++ de n'utiliser que la forme suffixée des opérateurs d'incrémentation/décrémentation et uniquement dans une expression dont on n'attend pas de résultat.

Crystal Clear action back.png Types