C Opérateurs

Un opérateur est un symbole qui indique au compilateur d'effectuer des opérations mathématiques ou logiques spécifiques. Le langage C dispose d'un riche ensemble d'opérateurs intégrés et fournit les types d'opérateurs suivants :

  • Opérateurs arithmétiques
  • Opérateurs relationnels
  • Opérateurs logiques
  • Opérateurs bit à bit
  • Opérateurs d'affectation
  • Opérateurs divers

Ce chapitre présentera un par un les opérateurs arithmétiques, relationnels, logiques, bit à bit, d'affectation et autres opérateurs.

Opérateurs arithmétiques

Le tableau suivant montre tous les opérateurs arithmétiques pris en charge par le langage C. Supposons que la variableAa une valeur de 10, la variableBa une valeur de 20, alors :

OpérateursDescriptionExemple
+Additionne deux opérandes.A + B donnera 30
-Soustrait le second opérande du premier opérande.A - B donnera -10
*Multiplie deux opérandes.A * B donnera 200
/Numérateur divisé par dénominateurB / A donnera 2
%Opérateur modulo, le reste après une division entière.B % A donnera 0
++Opérateur d'incrémentation, augmente la valeur entière de 1.A++ donnera 11
--Opérateur de décrémentation, diminue la valeur entière de 1.A-- donnera 9

Exemple

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

Exemple

#include <stdio.h> int main() { int a = 21; int b = 10; int c ; c = a + b; printf("Ligne 1 - la valeur de c est %d\n", c ); c = a - b; printf("Ligne 2 - la valeur de c est %d\n", c ); c = a * b; printf("Ligne 3 - la valeur de c est %d\n", c ); c = a / b; printf("Ligne 4 - la valeur de c est %d\n", c ); c = a % b; printf("Ligne 5 - la valeur de c est %d\n", c ); c = a++; // incrémentation après affectation, c est 21, a est 22 printf("Ligne 6 - la valeur de c est %d\n", c ); c = a--; // décrémentation après affectation, c est 22, a est 21 printf("Ligne 7 - la valeur de c est %d\n", c ); }

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 21
Line 7 - c 的值是 22

L'exemple suivant illustre la différence entre a++ et ++a

Exemple

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

La sortie de l'exécution du programme ci-dessus est :

先赋值后运算:
Line 1 - c 的值是 10
Line 2 - a 的值是 11
Line 3 - c 的值是 10
Line 4 - a 的值是 9
先运算后赋值:
Line 5 - c 的值是 11
Line 6 - a 的值是 11
Line 7 - c 的值是 9
Line 8 - a 的值是 9

Opérateurs relationnels

Le tableau suivant présente tous les opérateurs relationnels pris en charge par le langage C. Supposons que la variableAa une valeur de 10, que la variableBa une valeur de 20, alors :

OpérateursDescriptionExemple
==Vérifie si les valeurs de deux opérandes sont égales. Si elles sont égales, la condition est vraie.(A == B) est faux.
!=Vérifie si les valeurs de deux opérandes sont égales. Si elles ne sont pas égales, la condition est vraie.(A != B) est vraie.
>Vérifie si la valeur de l'opérande gauche est supérieure à la valeur de l'opérande droit. Si c'est le cas, la condition est vraie.(A > B) est faux.
<Vérifie si la valeur de l'opérande gauche est inférieure à la valeur de l'opérande droit. Si c'est le cas, la condition est vraie.(A < B) est vraie.
>=Vérifie si la valeur de l'opérande gauche est supérieure ou égale à la valeur de l'opérande droit. Si c'est le cas, la condition est vraie.(A >= B) est faux.
<=Vérifie si la valeur de l'opérande gauche est inférieure ou égale à la valeur de l'opérande droit. Si c'est le cas, la condition est vraie.(A <= B) est vraie.

Exemple

Voir l'exemple suivant pour découvrir tous les opérateurs relationnels disponibles en C :

Exemple

#include <stdio.h> int main() { int a = 21; int b = 10; int c ; if( a == b ) { printf("Ligne 1 - a est égal à b\n" ); } else { printf("Ligne 1 - a n'est pas égal à b\n" ); } if ( a < b ) { printf("Ligne 2 - a est inférieur à b\n" ); } else { printf("Ligne 2 - a n'est pas inférieur à b\n" ); } if ( a > b ) { printf("Ligne 3 - a est supérieur à b\n" ); } else { printf("Ligne 3 - a n'est pas supérieur à b\n" ); } /*Modifiez les valeurs de a et b*/ a = 5; b = 20; if ( a <= b ) { printf("Ligne 4 - a est inférieur ou égal à b\n" ); } if ( b >= a ) { printf("Ligne 5 - b est supérieur ou égal à a\n" ); } }

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a

Opérateurs logiques

Le tableau suivant montre tous les opérateurs relationnels et logiques pris en charge par le langage C. Supposons que la variableAait une valeur de 1, que la variableBait une valeur de 0, alors :

OpérateursDescriptionExemple
&&Appelé l'opérateur ET logique. Si les deux opérandes sont non nuls, la condition est vraie.(A && B) est faux.
||Appelé l'opérateur OU logique. Si l'un des deux opérandes est non nul, la condition est vraie.(A || B) est vrai.
!Appelé l'opérateur NON logique. Il est utilisé pour inverser l'état logique d'un opérande. Si une condition est vraie, l'opérateur NON logique la rendra fausse.!(A && B) est vrai.

Exemple

Consultez l'exemple suivant pour découvrir tous les opérateurs logiques disponibles en C :

Exemple

#include <stdio.h> int main() { int a = 5; int b = 20; int c ; if ( a && b ) { printf("Ligne 1 - La condition est vraie\n" ); } if ( a || b ) { printf("Ligne 2 - La condition est vraie\n" ); } /*Modifiez les valeurs de a et b*/ a = 0; b = 10; if ( a && b ) { printf("Ligne 3 - La condition est vraie\n" ); } else { printf("Ligne 3 - la condition est fausse\n" ); } if ( !(a && b) ) { printf("Ligne 4 - la condition est vraie\n" ); } }

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件为假
Line 4 - 条件为真

Opérateurs bit à bit

Les opérateurs bit à bit agissent sur les bits et effectuent des opérations bit par bit. Les tables de vérité de &, | et ^ sont les suivantes :

pqp & qp | qp ^ q
00000
01011
11110
10011

Supposons que A = 60 et B = 13. Maintenant représentés 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 présente les opérateurs bit à bit pris en charge par le langage C. Supposons que la variableAait une valeur de 60, que la variableBait une valeur de 13, alors :

OpérateursDescriptionExemple
&

Effectue une opération ET logique sur chaque bit des deux opérandes. Si les deux bits correspondants sont 1, le résultat est 1 ; sinon, il est 0.

L'opération ET bit à bit effectue l'opération « AND » sur les bits binaires. Les règles :

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) donne 12, soit 0000 1100.
|

Effectue une opération OR logique sur chaque bit des deux opérandes. Si les deux bits correspondants sont 0, le résultat est 0 ; sinon, il est 1.

L'opérateur OU bit à bit effectue l'opération « OU » sur les bits binaires. Les règles :

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) donne 61, soit 0011 1101.
^

Effectue une opération XOR logique sur chaque bit des deux opérandes. Si les deux valeurs de bits correspondantes sont identiques, le résultat est 0 ; sinon, il est 1.

L'opérateur XOR effectue l'opération « XOR » sur les bits binaires. Les règles :

0^0=0;   
0^1=1;   
1^0=1;  
1^1=0;
(A ^ B) a pour valeur 49, soit 0011 0001.
~

Effectue une négation logique sur chaque bit de l'opérande, c'est-à-dire transforme chaque 0 en 1 et chaque 1 en 0.

L'opérateur NON bit à bit effectue l'opération « NON » sur les bits binaires. Les règles :

~1=-2;   
~0=-1;
(~A ) donnera -61, soit 1100 0011, la forme en complément à deux d'un nombre binaire signé.
<<

Décale tous les bits de l'opérande vers la gauche du nombre de bits spécifié. Un décalage à gauche de n bits équivaut à multiplier par 2 à la puissance n.

Opérateur de décalage à gauche binaire. Décale tous les bits binaires d'un opérande vers la gauche d'un certain nombre de bits (les bits binaires les plus à gauche sont écartés, et des zéros sont ajoutés à droite).

A << 2 a pour valeur 240, soit 1111 0000.
>>

Décale tous les bits de l'opérande vers la droite du nombre de bits spécifié. Un décalage à droite de n bits équivaut à diviser par 2 à la puissance n.

Opérateur de décalage à droite binaire. Décale tous les bits binaires d'un nombre vers la droite d'un certain nombre de bits. Pour les nombres positifs, des zéros sont ajoutés à gauche ; pour les nombres négatifs, des uns sont ajoutés à gauche ; les bits les plus à droite sont écartés.

A >> 2 a pour valeur 15, soit 0000 1111.

Exemple

Voir l'exemple suivant pour apprendre tous les opérateurs bit à bit disponibles en C :

Exemple

#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 - la valeur de c est %d\n", c ); c = a | b; /* 61 = 0011 1101 */ printf("Ligne 2 - la valeur de c est %d\n", c ); c = a ^ b; /* 49 = 0011 0001 */ printf("Ligne 3 - la valeur de c est %d\n", c ); c = ~a; /*-61 = 1100 0011 */ printf("Ligne 4 - la valeur de c est %d\n", c ); c = a << 2; /* 240 = 1111 0000 */ printf("Ligne 5 - la valeur de c est %d\n", c ); c = a >> 2; /* 15 = 0000 1111 */ printf("Ligne 6 - la valeur de c est %d\n", c ); }

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

Opérateurs d'affectation

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

OpérateursDescriptionExemple
=Opérateur d'affectation simple, affecte la valeur de l'opérande droit à l'opérande gauche.C = A + B affectera la valeur de A + B à C
+=Opérateur d'addition et d'affectation : ajoute l'opérande droit à l'opérande gauche et affecte le résultat à l'opérande gauche.C += A équivaut à C = C + A.
-=Opérateur de soustraction et d'affectation : soustrait l'opérande droit de l'opérande gauche et affecte le résultat à l'opérande gauche.C -= A équivaut à C = C - A.
*=Opérateur de multiplication et d'affectation : multiplie l'opérande droit par l'opérande gauche et affecte le résultat à l'opérande gauche.C *= A est équivalent à C = C * A.
/=Opérateur de division et d'affectation : divise l'opérande gauche par l'opérande droit et affecte le résultat à l'opérande gauche.C /= A est équivalent à C = C / A.
%=Opérateur de modulo et d'affectation, prend le modulo de deux opérandes et l'affecte à l'opérande gauche.C %= A est équivalent à C = C % A.
<<=Opérateur de décalage à gauche et d'affectation.C <<= 2 est équivalent à C = C << 2.
>>=Opérateur de décalage à droite et d'affectation.C >>= 2 est équivalent à C = C >> 2.
&=Opérateur ET bit à bit et d'affectation.C &= 2 est équivalent à C = C & 2.
^=Opérateur OU exclusif bit à bit et d'affectation.C ^= 2 est équivalent à C = C ^ 2
|=Opérateur OU bit à bit et d'affectation.C |= 2 est équivalent à C = C | 2

Exemple

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

Exemple

#include <stdio.h> int main() { int a = 21; int c ; c = a; printf("exemple de l'opérateur =, valeur de c = %d\n", c ); c += a; printf("exemple de l'opérateur +=, valeur de c = %d\n", c ); c -= a; printf("Exemple d'opérateur -=, valeur de c = %d\n", c ); c *= a; printf("Exemple d'opérateur *=, valeur de c = %d\n", c ); c /= a; printf("Exemple d'opérateur /=, valeur de c = %d\n", c ); c = 200; c %= a; printf("Exemple d'opérateur %%=, valeur de c = %d\n", c ); c <<= 2; printf("Exemple d'opérateur <<=, valeur de c = %d\n", c ); c >>= 2; printf("Exemple d'opérateur >>=, valeur de c = %d\n", c ); c &= 2; printf("Exemple d'opérateur &=, valeur de c = %d\n", c ); c ^= 2; printf("Exemple d'opérateur ^=, valeur de c = %d\n", c ); c |= 2; printf("Exemple d'opérateur |=, valeur de c = %d\n", c ); }

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - =  运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2

Opérateurs divers ↦ sizeof & ternaire

Le tableau suivant répertorie quelques autres opérateurs importants pris en charge par le langage C, notammentsizeofet? :。

OpérateursDescriptionExemple
sizeof()Renvoie la taille d'une variable.sizeof(a) renverra 4, où a est un entier.
&Renvoie l'adresse d'une variable.&a; donnera l'adresse réelle de la variable.
*Pointe vers une variable.*a; pointera vers une variable.
? :Expression conditionnelleSi la condition est vraie ? alors valeur X : sinon valeur Y

Exemple

Voir l'exemple suivant pour apprendre tous les opérateurs divers disponibles en C :

Exemple

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

Line 1 - 变量 a 的大小 = 4
Line 2 - 变量 b 的大小 = 2
Line 3 - 变量 c 的大小 = 8
a 的值是 4
*ptr 是 4
b 的值是 30
b 的值是 20

Priorité des opérateurs en C

La priorité des opérateurs détermine le regroupement des termes dans une expression. Cela affecte la façon dont une expression est évaluée. Certains opérateurs ont une priorité plus élevée que d'autres ; par exemple, les opérateurs de multiplication et de division ont une priorité plus élevée que les opérateurs d'addition et de soustraction.

Par exemple, x = 7 + 3 * 2. Ici, x reçoit 13, et non 20, car l'opérateur * a une priorité plus élevée que +, donc la multiplication 3*2 est calculée en premier, puis 7 est ajouté.

Le tableau suivant liste les opérateurs par ordre de priorité, du plus élevé au plus faible. Les opérateurs ayant une priorité plus élevée apparaissent en haut du tableau, et les opérateurs ayant une priorité plus faible apparaissent en bas. Dans une expression, les opérateurs ayant une priorité plus élevée sont évalués en premier.

Catégorie OpérateursAssociativité
Postfixe() [] -> . ++ - -   De gauche à droite
Unaire + - ! ~ ++ - - (type)* & sizeof  De droite à gauche
Multiplicatif * / % De gauche à droite
Additif+ -  De gauche à droite
Décalage << >>  De gauche à droite
Relation< <= > >=  De gauche à droite
Égalité == !=  De gauche à droite
ET bit à bit&  De gauche à droite
OU exclusif bit à bit ^  De gauche à droite
OU bit à bit |  De gauche à droite
ET logique&&  De gauche à droite
OU logique ||  De gauche à droite
Conditions?:  De droite à gauche
Affectation = += -= *= /= %=>>= <<= &= ^= |= De droite à gauche
comma ,  De gauche à droite

Exemple

Voir l'exemple suivant pour comprendre la priorité des opérateurs en C :

Exemple

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50
autres extensions