English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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érateur | Description | Exemple |
---|---|---|
+ | Addition des deux opérandes | A + B donnera 30 |
- | Soustraction de la première opérande de la deuxième opérande | A - B donnera -10 |
* | Multiplication des deux opérandes | A * B donnera 200 |
/ | Diviseur de la fraction | B / A donnera 2 |
% | Opérateur de modulo, reste de la division entière | B % A donnera 0 |
++ | Opérateur d'incrémentation, valeur entière augmentée 1 | A++ On obtiendra 11 |
-- | Opérateur de décrémentation, valeur entière diminuée 1 | A-- On obtiendra 9 |
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
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érateur | Description | Exemple |
---|---|---|
== | 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. |
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
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érateur | Description | Exemple |
---|---|---|
&& | 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. |
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 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 :
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
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érateur | Description | Exemple |
---|---|---|
& | 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 |
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
Le tableau suivant liste les opérateurs d'affectation pris en charge par le langage C :
opérateur | Description | Exemple |
---|---|---|
= | L'opérateur d'affectation simple, assigne la valeur de l'opérande de droite à l'opérande de gauche | C = 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 gauche | C += 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 gauche | C -= 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 gauche | C *= 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 gauche | C /= 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 gauche | C %= A est équivalent à C = C % A |
<<= | Opérateur de décalage à gauche et affectation | C <<= 2 Équivaut à C = C << 2 |
>>= | Opérateur de décalage à droite et affectation | C >>= 2 Équivaut à C = C >> 2 |
&= | Opérateur de ET binaire et affectation | C &= 2 Équivaut à C = C & 2 |
^= | Opérateur de XOR binaire et affectation | C ^= 2 Équivaut à C = C ^ 2 |
|= | Opérateur de OU binaire et affectation | C |= 2 Équivaut à C = C | 2 |
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
Le tableau suivant liste d'autres opérateurs importants supportés par le langage C, y compris sizeof et ? :.
opérateur | Description | Exemple |
---|---|---|
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 conditionnelle | Si la condition est vraie ? alors la valeur est X : sinon la valeur est Y |
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
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 |
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