English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base C

Contrôle de flux C

Fonctions du langage C

Tableaux du langage C

Pointeurs du langage C

Chaine de caractères en langage C

Structure C

Fichier C

C d'autres

Manuel de référence C

Opérateurs du langage C

Un opérateur est un symbole qui indique au compilateur d'exécuter une opération mathématique ou logique spécifique. Le langage C intègre une riche collection d'opérateurs et fournit les types d'opérateurs suivants :

  • opérateurs arithmétiques

  • opérateurs de relation

  • Les opérateurs logiques

  • Les opérateurs de bit

  • Opérateurs d'affectation

  • Opérateurs divers

Cette section présentera les opérateurs arithmétiques, les opérateurs de relation, les opérateurs logiques, les opérateurs de bit, les opérateurs d'affectation et d'autres opérateurs.

opérateurs arithmétiques

Le tableau suivant affiche tous les opérateurs arithmétiques supportés par le langage C. Supposons que la variable A La valeur est 10Variable B La valeur est 20, alors :

opérateurDescriptionExemple
+Addition des deux opérandesA + B donnera 30
-Soustraction de la première opérande de la deuxième opérandeA - B donnera -10
*Multiplication des deux opérandesA * B donnera 200
/Diviseur de la fractionB / A donnera 2
%Opérateur de modulo, reste de la division entièreB % A donnera 0
++Opérateur d'incrémentation, valeur entière augmentée 1A++ On obtiendra 11
--Opérateur de décrémentation, valeur entière diminuée 1A-- On obtiendra 9

Exemple

Voyez l'exemple suivant pour comprendre tous les opérateurs arithmétiques disponibles en C :

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a + b;
   printf("Ligne 1 - c = a >>
", c = a >>
);
   c = a - b;
   printf("Ligne 2 - c = a >>
", c = a >>
);
   c = a * b;
   printf("Ligne 3 - c = a >>
", c = a >>
);
   c = a / b;
   printf("Ligne 4 - c = a >>
", c = a >>
);
   c = a % b;
   printf("Ligne 5 - c = a >>
", c = a >>
);
   c = a++;  // Addition après affectation 1 ,c est 21,a est 22
   printf("Ligne 6 - c = a >>
", c = a >>
);
   c = a--;  // Soustraction après affectation 1 ,c est 22 ,a est 21
   printf("Ligne 7 - c = a >>
", c = a >>
);
 
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - La valeur de c est 31
Ligne 2 - La valeur de c est 11
Ligne 3 - La valeur de c est 210
Ligne 4 - La valeur de c est 2
Ligne 5 - La valeur de c est 1
Ligne 6 - La valeur de c est 21
Ligne 7 - La valeur de c est 22

L'exemple suivant montre a++ et ++La différence entre a :

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("Affectation avant opération :\n");
   printf("Ligne 1 - c = a >>
", c = a >>
);
   printf("Ligne 2 - la valeur de a est %d\n", a);
   a = 10;
   c = a--; 
   printf("Ligne 3 - c = a >>
", c = a >>
);
   printf("Ligne 4 - la valeur de a est %d\n", a);
 
   printf("Opération avant affectation :\n");
   a = 10;
   c = ++a; 
   printf("Ligne 5 - c = a >>
", c = a >>
);
   printf("Ligne 6 - la valeur de a est %d\n", a);
   a = 10;
   c = --a; 
   printf("Ligne 7 - c = a >>
", c = a >>
);
   printf("Ligne 8 - la valeur de a est %d\n", a);
 
}

Le résultat de l'exécution du programme suivant est :

Affectation avant opération :
Ligne 1 - La valeur de c est 10
Ligne 2 - valeur de a est 11
Ligne 3 - La valeur de c est 10
Ligne 4 - valeur de a est 9
Opération avant affectation :
Ligne 5 - La valeur de c est 11
Ligne 6 - valeur de a est 11
Ligne 7 - La valeur de c est 9
Ligne 8 - valeur de a est 9

opérateurs de relation

Le tableau suivant affiche tous les opérateurs de relation supportés par le langage C. Supposons que la variable A La valeur est 10Variable B La valeur est 20, alors :

opérateurDescriptionExemple
==Vérifiez si les valeurs des deux opérateurs sont égales, et si elles le sont, la condition est vraie.(A == B) est faux.
!=Vérifiez si les valeurs des deux opérateurs sont égales, et si elles ne le sont pas, la condition est vraie.(A != B) est vrai.
>Vérifiez si la valeur de l'opérateur de gauche est supérieure à la valeur de l'opérateur de droite, et si c'est le cas, la condition est vraie.(A > B) est faux.
<Vérifiez si la valeur de l'opérateur de gauche est inférieure à la valeur de l'opérateur de droite, et si c'est le cas, la condition est vraie.(A < B) est vrai.
>=Vérifiez si la valeur de l'opérateur de gauche est supérieure ou égale à la valeur de l'opérateur de droite, et si c'est le cas, la condition est vraie.(A >= B) est faux.
<=Vérifiez si la valeur de l'opérateur de gauche est inférieure ou égale à la valeur de l'opérateur de droite, et si c'est le cas, la condition est vraie.(A <= B) est vrai.

Exemple

Voyons l'exemple suivant pour comprendre tous les opérateurs relationnels disponibles en C :

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   if (a == b)
   {
      printf("Ligne 1 - a est égal à b

   }
   else
   {
      printf("Ligne 1 - a n'est pas égal à b

   }
   if (a < b)
   {
      printf("Ligne 2 - a est inférieur à b

   }
   else
   {
      printf("Ligne 2 - a n'est pas supérieur ou égal à b

   }
   if (a > b)
   {
      printf("Ligne 3 - a est supérieur à b

   }
   else
   {
      printf("Ligne 3 - a n'est pas supérieur ou égal à b

   }
   /* Changer les valeurs de a et b */
   a = 5;
   b = 20;
   if (a <= b)
   {
      printf("Ligne 4 - a est inférieure ou égale à b

   }
   if (b >= a)
   {
      printf("Ligne 5 - b est supérieure ou égale à a

   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - a n'est pas égal à b
Ligne 2 - a n'est pas inférieur ou égal à b
Ligne 3 - a est supérieur à b
Ligne 4 - a est inférieure ou égale à b
Ligne 5 - b est supérieure ou égale à a

Les opérateurs logiques

Le tableau suivant montre tous les opérateurs logiques relationnels pris en charge par le langage C. Hypothèse que la variable A La valeur est 1Variable B Si la valeur est 0, alors :

opérateurDescriptionExemple
&&C'est appelé opérateur de logique et. Si les deux opérateurs sont non nuls, la condition est vraie.(A && B) est faux.
||C'est appelé opérateur de logique ou. Si l'un des deux opérateurs est non nul, la condition est vraie.(A || B) est vrai.
!C'est appelé opérateur de non logique. Il est utilisé pour inverser l'état logique de l'opérateur. Si la condition est vraie, l'opérateur de non logique le rend faux.!(A && B) est vrai.

Exemple

Voyons l'exemple suivant pour comprendre tous les opérateurs logiques disponibles en C :

#include <stdio.h>
 
int main()
{
   int a = 5;
   int b = 20;
   int c;
 
   if (a && b)
   {
      printf("Ligne 1 - Condition vraie

   }
   if (a || b)
   {
      printf("Ligne 2 - Condition vraie

   }
   /* Changer les valeurs de a et b */
   a = 0;
   b = 10;
   if (a && b)
   {
      printf("Ligne 3 - Condition vraie

   }
   else
   {
      printf("Ligne 3 - Condition fausse

   }
   if (!(a && b))
   {
      printf("Ligne 4 - Condition vraie

   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - Condition vraie
Ligne 2 - Condition vraie
Ligne 3 - Condition fausse
Ligne 4 - Condition vraie

Les opérateurs de bit

Les opérateurs de bit agissent sur les bits et exécutent les opérations bit par bit. Les tableaux de vérité des opérateurs de bit &、| et ^ sont indiqués ci-dessous :

pqp & qp | qp ^ q
00000
01011
11110
10011

Hypothèse si A = 60, et B = 13,représentés maintenant en format binaire, ils sont les suivants :

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

Le tableau suivant montre les opérateurs de bit pris en charge par le langage C. Hypothèse de variable A La valeur est 60, variable B La valeur est 13,alors :

opérateurDescriptionExemple
&

Opération de ET binaire, effectue une opération ET binaire. Règles d'opération :

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) donnera 12,c'est-à-dire 0000 1100
|

Opérateur de OU binaire, effectue une opération OU binaire. Règles d'opération :

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) donnera 61,c'est-à-dire 0011 1101
^

Opérateur de XOR, effectue une opération XOR binaire. Règles d'opération :

0^0=0;   
0^1=1;   
1^0=1;  
1^1=0;
(A ^ B) donnera 49,c'est-à-dire 0011 0001
~

Opérateur de négation, effectue une opération de négation binaire. Règles d'opération :

~1=0;   
~0=1;
(~A ) donnera -61,c'est-à-dire 1100 0011,c'est-à-dire la forme de complément à deux de nombre binaire signé.
<<Opérateur de déplacement à gauche en binaire. Déplace tous les bits d'un objet opératoire en binaire d'un certain nombre de places vers la gauche (les bits de gauche sont jetés, et des zéros sont ajoutés à droite).A << 2 On obtiendra 240,c'est-à-dire 1111 0000
>>Opérateur de déplacement à droite en binaire. Déplace tous les bits d'un nombre en binaire d'un certain nombre de places vers la droite, les zéros sont ajoutés à gauche pour un nombre positif, et les ones sont ajoutés à gauche pour un nombre négatif.1,les bits de droite sont jetés.A >> 2 On obtiendra 15,c'est-à-dire 0000 1111

Exemple

Voyez l'exemple suivant pour comprendre tous les opérateurs de bit utilisables dans le langage C :

#include <stdio.h>
 
int main()
{
 
   unsigned int a = 60;    /* 60 = 0011 1100 */  
   unsigned int b = 13;    /* 13 = 0000 1101 */
   int c = 0;           
 
   c = a & b;       /* 12 = 0000 1100 */ 
   printf("Ligne 1 - c = a >>
", c = a >>
);
 
   c = a | b;       /* 61 = 0011 1101 */
   printf("Ligne 2 - c = a >>
", c = a >>
);
 
   c = a ^ b;       /* 49 = 0011 0001 */
   printf("Ligne 3 - c = a >>
", c = a >>
);
 
   c = ~a;          /*-61 = 1100 0011 */
   printf("Ligne 4 - c = a >>
", c = a >>
);
 
   c = a << 2;     /* 240 = 1111 0000 */
   printf("Ligne 5 - c = a >>
", c = a >>
);
 
   c = a >> 2;     /* 15 = 0000 1111 */
   printf("Ligne 6 - c = a >>
", c = a >>
);
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - La valeur de c est 12
Ligne 2 - La valeur de c est 61
Ligne 3 - La valeur de c est 49
Ligne 4 - La valeur de c est -61
Ligne 5 - La valeur de c est 240
Ligne 6 - La valeur de c est 15

Opérateurs d'affectation

Le tableau suivant liste les opérateurs d'affectation pris en charge par le langage C :

opérateurDescriptionExemple
=L'opérateur d'affectation simple, assigne la valeur de l'opérande de droite à l'opérande de gaucheC = A + B assignera A + La valeur de B est assignée à C
+=L'opérateur d'addition et d'affectation, affecte le résultat de l'addition de l'opérande de droite à l'opérande de gauche à l'opérande de gaucheC += A est équivalent à C = C + A
-=L'opérateur de soustraction et d'affectation, affecte le résultat de la soustraction de l'opérande de droite de l'opérande de gauche à l'opérande de gaucheC -= A est équivalent à C = C - A
*=L'opérateur de multiplication et d'affectation, affecte le résultat de la multiplication de l'opérande de droite par l'opérande de gauche à l'opérande de gaucheC *= A est équivalent à C = C * A
/=L'opérateur de division et d'affectation, affecte le résultat de la division de l'opérande de gauche par l'opérande de droite à l'opérande de gaucheC /= A est équivalent à C = C / A
%=L'opérateur de reste et d'affectation, affecte le reste des deux opérandes à l'opérande de gaucheC %= A est équivalent à C = C % A
<<=Opérateur de décalage à gauche et affectationC <<= 2 Équivaut à C = C << 2
>>=Opérateur de décalage à droite et affectationC >>= 2 Équivaut à C = C >> 2
&=Opérateur de ET binaire et affectationC &= 2 Équivaut à C = C & 2
^=Opérateur de XOR binaire et affectationC ^= 2 Équivaut à C = C ^ 2
|=Opérateur de OU binaire et affectationC |= 2 Équivaut à C = C | 2

Exemple

Voyons l'exemple suivant pour comprendre tous les opérateurs d'affectation disponibles en C :

#include <stdio.h>
 
main()
{
   int a = 21;
   int c;
 
   c = a;
   printf("Ligne 1 - Exemple de l'opérateur =, la valeur de c est = %d\n", c );
 
   c += a;
   printf("Ligne 2 - +Exemple de l'opérateur =, la valeur de c est = %d\n", c );
 
   c -= a;
   printf("Ligne 3 - -Exemple de l'opérateur =, la valeur de c est = %d\n", c );
 
   c *= a;
   printf("Ligne 4 - *Exemple de l'opérateur =, la valeur de c est = %d\n", c );
 
   c /= a;
   printf("Ligne 5 - /Exemple de l'opérateur =, la valeur de c est = %d\n", c );
 
   c = 200;
   c %= a;
   printf("Ligne 6 - Exemple de l'opérateur %=, la valeur de c est = %d\n", c );
 
   c <<=  2;
   printf("Ligne 7 - Exemple de l'opérateur <<=, la valeur de c est = %d\n", c );
 
   c >>=  2;
   printf("Ligne 8 - Exemple de l'opérateur >=, la valeur de c est = %d\n", c );
 
   c &=  2;
   printf("Ligne 9 - Exemple de l'opérateur &=, la valeur de c est = %d\n", c );
 
   c ^=  2;
   printf("Ligne 10 - Exemple de l'opérateur ^=, la valeur de c est = %d\n", c );
 
   c |=  2;
   printf("Ligne 11 - c |=, exemple, la valeur de c est = %d\n", c );
 
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - Exemple de l'opérateur =, la valeur de c est = 21
Ligne 2 - +Exemple de l'opérateur =, la valeur de c est = 42
Ligne 3 - -Exemple de l'opérateur =, la valeur de c est = 21
Ligne 4 - *Exemple de l'opérateur =, la valeur de c est = 441
Ligne 5 - /Exemple de l'opérateur =, la valeur de c est = 21
Ligne 6 - Exemple de l'opérateur %=, la valeur de c est = 11
Ligne 7 - Exemple de l'opérateur <<=, la valeur de c est = 44
Ligne 8 - Exemple de l'opérateur >=, la valeur de c est = 11
Ligne 9 - Exemple de l'opérateur &=, la valeur de c est = 2
Ligne 10 - Exemple de l'opérateur ^=, la valeur de c est = 0
Ligne 11 - Exemple de l'opérateur |=, la valeur de c est = 2

Opérateurs divers ⇨ sizeof & ternaire

Le tableau suivant liste d'autres opérateurs importants supportés par le langage C, y compris sizeof et ? :.

opérateurDescriptionExemple
sizeof()Retourne la taille de la variable.sizeof(a) retournera 4où a est un entier.
&Retourne l'adresse de la variable.&a; donnera l'adresse réelle de la variable.
*Pointera vers une variable.*a; pointera vers une variable.
? :Expression conditionnelleSi la condition est vraie ? alors la valeur est X : sinon la valeur est Y

Exemple

Voyons l'exemple suivant pour comprendre tous les opérateurs divers disponibles en C :

#include <stdio.h>
 
int main()
{
   int a = 4;
   short b;
   double c;
   int* ptr;
 
   /* Exemple de l'opérateur sizeof */
   printf("Ligne 1 - La taille de la variable a est = %lu\n", sizeof(a) );
   printf("Ligne 2 - taille de la variable b est %lu\n", sizeof(b));
   printf("Ligne 3 - taille de la variable c est %lu\n", sizeof(c));
 
   /* & et * exemple d'opérateur */
   ptr = &a;    /*  */
   printf("valeur de a est %d\n", a);
   printf("*ptr est %d\n", *ptr);
 
   /* exemple de l'opérateur ternaire */
   a = 10;
   b = (a == 1) ? 20: 30;
   printf("valeur de b est %d\n", b);
 
   b = (a == 10) ? 20: 30;
   printf("valeur de b est %d\n", b);
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Ligne 1 - taille de la variable a est = 4
Ligne 2 - taille de la variable b est = 2
Ligne 3 - taille de la variable c est = 8
valeur de a est 4
*ptr est 4
valeur de b est 30
valeur de b est 20

Priorité des opérateurs en C

La priorité des opérateurs détermine la combinaison des éléments dans l'expression. Cela affecte la manière dont une expression est calculée. Certains opérateurs ont une priorité supérieure à d'autres, par exemple, les opérateurs de multiplication et de division ont une priorité supérieure aux opérateurs d'addition et de soustraction.

par exemple x = 7 + 3 * 2ici, x est affecté de 13, et non 20, car l'opérateur * plus + la priorité est plus élevée, donc la multiplication est calculée d'abord 3*2ensuite, plus 7.

Le tableau suivant liste les opérateurs par priorité décroissante, avec les opérateurs de priorité supérieure en haut du tableau et ceux de priorité inférieure en bas. Dans l'expression, les opérateurs de priorité supérieure sont calculés en premier.

catégorie opérateur associativité 
préfixe () [] -> .  ++   - -  de gauche à droite 
unary +  -   ! ~  ++  - -   (type)*  & sizeof de droite à gauche 
multiplication division *  /  % de gauche à droite 
addition soustraction +  - de gauche à droite 
décalage << >> de gauche à droite 
relation < <= > >= de gauche à droite 
égal == != de gauche à droite 
bitwise et AND & de gauche à droite 
bitwise xor XOR ^ de gauche à droite 
bitwise ou OR | de gauche à droite 
logique et AND && de gauche à droite 
logique ou OR || de gauche à droite 
conditionnelle ?: de droite à gauche 
affectation =  +=  -=  *=  /=>>= <<= &= ^= |= de droite à gauche 
virgule , de gauche à droite 

Exemple

Voyez l'exemple suivant pour comprendre la priorité des opérateurs dans le langage C :

#include <stdio.h>
 
main()
{
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
 
   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   printf("(a + b) * c / valeur de d est %d\n", e);
 
   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   printf("((a + b) * c) / d la valeur est %d\n", e);
 
   e = (a + b) * (c / d);   // (30) * (15/5)
   printf("(a + b) * (c / d) valeur est %d\n", e);
 
   e = a + (b * c) / d;     //  20 + (150/5)
   printf("a + (b * c) / d la valeur est %d\n", e);
  
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

(a + b) * c / d la valeur est 90
((a + b) * c) / d la valeur est 90
(a + b) * (c / d) la valeur est 90
a + (b * c) / d la valeur est 50