Langage C - Les opérateurs

baissaoui Messages postés 497 Date d'inscription jeudi 2 septembre 2021 Statut Webmaster Dernière intervention 22 mars 2024 - 23 juin 2022 à 16:01

Qu'est-ce qu'un opérateur ?

<niv1>Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc.

On distingue plusieurs types d'opérateurs :
  • les opérateurs de calcul
  • les opérateurs d'assignation
  • les opérateurs d'incrémentation
  • les opérateurs de comparaison
  • les opérateurs logiques
  • (les opérateurs bit-à-bit)
  • (les opérateurs de décalage de bit)

Vidéo

"FAQ : langage C - Les opérateurs"

Les opérateurs de calcul

<niv1>Les opérateurs de calcul permettent de modifier mathématiquement la valeur d'une variable.

<niv1>
OpérateurDénominationEffetExempleRésultat (avec x entier valant 7)
+opérateur d'additionAjoute deux valeursx+310
-opérateur de soustractionSoustrait deux valeursx-34
*opérateur de multiplicationMultiplie deux valeursx*321
/opérateur de divisionDivise deux valeursx/32
%opérateur moduloDonne le reste de la division entièrex%31

Les opérateurs d'assignation

<niv1>Ces opérateurs permettent de simplifier des opérations telles que "ajouter une valeur dans une variable et stocker le résultat dans la variable".

Avec les opérateurs d'assignation il est possible d'écrire x = x+2 sous la forme suivante x+=2
Dans les deux cas, si la valeur de x était 7 avant opération, elle sera de 9 après...

<niv1>Les autres opérateurs du même type sont les suivants :

<niv1>
Opérateur Effet
=Affecte une valeur (à droite) à une variable (à gauche)
+=additionne deux valeurs et stocke la somme dans la variable
-=soustrait deux valeurs et stocke la différence dans la variable
*=multiplie deux valeurs et stocke le produit dans la variable
/=divise deux valeurs et stocke le quotient dans la variable
%=divise deux valeurs et stocke le reste dans la variable


<niv1>Les opérateur d'affectations renvoient aussi une valeur, qui est celle de la variable après affectation. Cela permet notamment de faire des affectations en cascade :

Par exemple a = b = c = 1; correspond à a = (b = (c = 1));.

Les opérateurs d'incrémentation

<niv1>Ce type d'opérateur permet de facilement augmenter ou diminuer d'une unité une variable. Ces opérateurs sont très utiles pour des structures telles que des boucles, qui ont besoin d'un compteur (variable qui augmente de un en un).

<niv1>Un opérateur de type x++ permet de remplacer des notations lourdes telles que

x=x+1 ou bien x+=1.

<niv1>
OpérateurDénominationEffetSyntaxeRésultat (avec x valant 7)
++IncrémentationAugmente d'une unité la variablex++8
--DécrémentationDiminue d'une unité la variablex--6

Les opérateurs de comparaison

<niv1>
OpérateurDénominationEffetExempleRésultat (avec x valant 7)
==

A ne pas confondre avec le signe d'affectation (=) !
opérateur d'égalitéCompare deux valeurs et vérifie leur égalitéx==3Retourne 1 si x est égal à 3, sinon 0
<opérateur d'infériorité stricteVérifie qu'une variable est strictement inférieure à une valeur x<3Retourne 1 si x est inférieur à 3, sinon 0
<=opérateur d'inférioritéVérifie qu'une variable est inférieure ou égale à une valeur x<=3Retourne 1 si x est inférieur ou égal à 3, sinon 0
>opérateur de supériorité stricteVérifie qu'une variable est strictement supérieure à une valeur x>3Retourne 1 si x est supérieur à 3, sinon 0
>=opérateur de supérioritéVérifie qu'une variable est supérieure ou égale à une valeur x>=3Retourne 1 si x est supérieur ou égal à 3, sinon 0
!=opérateur de différenceVérifie qu'une variable est différente d'une valeur x!=3Retourne 1 si x est différent de 3, sinon 0

Les opérateurs logiques (booléens)

<niv1>Ce type d'opérateur permet de vérifier si plusieurs conditions sont vraies :

<niv1>
OpérateurDénominationEffetSyntaxe
||OU logiqueVérifie qu'une des conditions est réalisée((condition1) || (condition2))
&&ET logiqueVérifie que toutes les conditions sont réalisées((condition1) && (condition2))
!NON logiqueInverse l'état d'une variable booléenne (retourne la valeur 1 si la variable vaut 0, 0 si elle vaut 1)!(condition)

(Les opérateurs bit-à-bit)

<niv1>Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement pas l'utilité. Pour ceux qui voudraient comprendre, rendez-vous aux chapitres suivants :

<niv1>Ce type d'opérateur traite ses opérandes comme des données binaires, plutôt que des données décimales, hexadécimales ou octales.
Ces opérateurs traitent ces données selon leur représentation binaire
mais retournent des valeurs numériques standard dans leur format d'origine.

<niv1>Les opérateurs suivants effectuent des opérations bit-à-bit, c'est-à-dire avec des bits de même poids.

<niv1>
OpérateurDénominationEffetSyntaxeRésultat
&ET bit-à-bitRetourne 1 si les deux bits de même poids sont à 19 & 12 (1001 & 1100)8 (1000)
|OU bit-à-bitRetourne 1 si l'un ou l'autre des deux bits de même poids est à 1 (ou les deux)9 | 12 (1001 | 1100)13 (1101)
^OU bit-à-bit exclusifRetourne 1 si l'un des deux bits de même poids est à 1 (mais pas les deux)9 ^ 12 (1001 ^ 1100)5 (0101)

(Les opérateurs de décalage de bit)

<niv1>Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement pas l'utilité.
Pour ceux qui voudraient comprendre, rendez-vous aux chapitres suivants :

<niv1>Ce type d'opérateur traite ses opérandes comme des données binaires d'une longueur de 32 bits, plutôt que des données décimales, hexadécimales ou octales.
Ces opérateurs traitent ces données selon leur représentation binaire
mais retournent des valeurs numériques standard dans leur format d'origine.

<niv1>Les opérateurs suivants effectuent des décalages sur les bits, c'est-à-dire qu'ils décalent chacun des bits d'un nombre de positions vers la gauche ou vers la droite. La première opérande désigne la donnée sur laquelle on va faire le décalage, la seconde désigne le nombre de décalages.

<niv1>
OpérateurDénominationEffetSyntaxeRésultat
<<Décalage à gaucheDécale les bits vers la gauche (multiplie par 2 à chaque décalage). Les zéros qui sortent à gauche sont perdus, tandis que des zéros sont insérés à droite6 << 1 (110 << 1)12 (1100)
>>Décalage à droite avec conservation du signeDécale les bits vers la droite (divise par 2 à chaque décalage). Les zéros qui sortent à droite sont perdus, tandis que le bit non nul de poids plus fort est recopié à gauche6 >> 1 (0110 >> 1)3 (0011)

Les priorités

<niv1>Lorsque l'on associe plusieurs opérateurs, il faut que le navigateur sache dans quel ordre les traiter, voici donc dans l'ordre décroissant les priorités de tous les opérateurs :

<niv1>
Priorité des opérateurs
+++++++++++++()[]
++++++++++++--++!~-
+++++++++++*/%
+++++++++++-
+++++++++<<>>
++++++++<<=>=>
+++++++==!=
++++++&
+++++^
++++|
+++&&||
++?:
+=+=-=*=/=%=<<=>>=&=^=|=