Aller au contenu

Langage C++/Opérateurs

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Opérateurs
Icône de la faculté
Chapitre no 4
Leçon : Langage C++
Chap. préc. :Types
Chap. suiv. :Syntaxe C++
fin de la boite de navigation du chapitre
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.

Les Opérateurs C++

[modifier | modifier le wikicode]

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


Opérateurs d'affectation

[modifier | modifier le wikicode]

L'opérateur d'affectation simple "="

[modifier | modifier le wikicode]

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 ;

Début de l'exemple
Fin de l'exemple


L'opérateur d'affectation additionneur "+="

[modifier | modifier le wikicode]

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

Syntaxe :

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

Début de l'exemple
Fin de l'exemple


L'opérateur d'affectation soustracteur "-="

[modifier | modifier le wikicode]

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 ;

Début de l'exemple
Fin de l'exemple


L'opérateur d'affectation multiplicateur "*="

[modifier | modifier le wikicode]

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 ;

Début de l'exemple
Fin de l'exemple


L'opérateur d'affectation diviseur "/="

[modifier | modifier le wikicode]

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 ;

Début de l'exemple
Fin de l'exemple


L'opérateur d'affectation modulo "%="

[modifier | modifier le wikicode]

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 ;

Début de l'exemple
Fin de l'exemple


Les opérateurs mathématiques

[modifier | modifier le wikicode]

Opérateur d'addition "+"

[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple


Opérateur de soustraction "-"

[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple


Opérateur de multiplication "*"

[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple


Opérateur de division "/"

[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple


Opérateur de modulo "%"

[modifier | modifier le wikicode]

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 "%".

Début de l'exemple
Fin de l'exemple


Les opérateurs comparatifs

[modifier | modifier le wikicode]

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


Comparateur d'égalité "=="

[modifier | modifier le wikicode]

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


Comparateur "!=" (différent de)

[modifier | modifier le wikicode]

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.


Comparateur "<" (strictement inférieur à)

[modifier | modifier le wikicode]

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.


Comparateur "<=" (inférieur à)

[modifier | modifier le wikicode]

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.


Comparateur ">=" (supérieur à)

[modifier | modifier le wikicode]

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.

Comparateur ">" (strictement supérieur à)

[modifier | modifier le wikicode]

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.


Opérateurs logiques

[modifier | modifier le wikicode]

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.

Panneau d’avertissement Attention : les opérateurs &, | et ^ sont des opérateurs bit à bit ! Les opérateurs logiques correspondant au & et au | sont respectivement && et ||.


Les opérateurs logiques

[modifier | modifier le wikicode]

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 vraies. Partant de ce principe, il n'est plus nécessaire d’avoir un opérateur YES.


Opérateur "!" (NOT)
[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple


Opérateur "&&" (AND)
[modifier | modifier le wikicode]

Le comparateur C++ AND, représenté par "&&" (double "et commercial"), 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.

Début de l'exemple
Fin de l'exemple


Opérateur "||" (OR)
[modifier | modifier le wikicode]

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.

Opérateurs bit à bit

[modifier | modifier le wikicode]

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

Opérateur "&" (AND)
[modifier | modifier le wikicode]

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++

Début de l'exemple
Fin de l'exemple


Opérateur "|" (OR)
[modifier | modifier le wikicode]

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++ :

Début de l'exemple
Fin de l'exemple


Opérateur "^" (XOR)
[modifier | modifier le wikicode]

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++ :

Début de l'exemple
Fin de l'exemple


Opérateur "~" (NOT)
[modifier | modifier le wikicode]

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

Début de l'exemple
Fin de l'exemple



Opérateurs unaires

[modifier | modifier le wikicode]

En C++, il existe des opérateurs qui ne nécessitent qu'un opérande. Ils sont appelés opérateurs unaires.


Opérateurs "++" (incrémentation)

[modifier | modifier le wikicode]

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.


Forme préfixée
[modifier | modifier le wikicode]

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

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

Forme suffixée
[modifier | modifier le wikicode]

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

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

Opérateurs "--" (décrémentation)

[modifier | modifier le wikicode]

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.

Forme préfixée
[modifier | modifier le wikicode]

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

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

Forme suffixée
[modifier | modifier le wikicode]

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

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

Effets secondaires
[modifier | modifier le wikicode]

En C++ il existe un effet secondaire avec certains opérateurs. Si l’on utilise plusieurs opérateurs unaires ou d'affectation dans la même ligne de commande, le résultat est indéterminé par les spécifications du langage[2]. 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.

Début de l'exemple
Fin de l'exemple

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

Début de l'exemple
Fin de l'exemple


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

autre exemple :

Début de l'exemple
Fin de l'exemple


Ici l’affichage peut avoir bien des valeurs.

Il est donc recommandé d’utiliser ces opérateurs avec précaution et d’éviter toute expression trop complexe(comme ci-dessus). D'ailleurs, de telles expressions ont plutôt tendance à rendre le code moins lisible - ce qui est l'inverse du but initial - et cache souvent une mauvaise conception.


Néanmoins, une utilisation raisonnable de ces opérateurs permet de rendre un code plus concis, sans perdre en lisibilité.

Début de l'exemple
Fin de l'exemple

\n, signifie une le line-feed.

\t, signifie la tabulation horizontale.

Et leurs origines viennent des ordinateurs qui existaient avant la démocratisation des écrans. Et ils étaient destinés aux imprimantes.

Le \n est un caractère spéciale que les imprimantes interprétaient comme instruction de faire avancer le papier d’une ligne verticalement.

Le \t est un caractère spéciale qui donnait l’instruction d’avancer la tête d’impression de 1 à 8 espaces horizontalement. Soit la position divisible par huit sans reste la plus près de sa position actuelle.

  1. https://www.miniwebtool.com/bitwise-calculator/?data_type=10&number1=6&number2=12&operator=OR
  2. Programmer en langage C++, Claude Delannoy, 2011