Les opérateurs en langage C
Les opérateurs sont les symboles qui permettent d'effectuer des opérations sur des opérandes (variables ou valeurs). Le C dispose d'un ensemble riche d'opérateurs couvrant les calculs arithmétiques, les comparaisons, la logique, les manipulations de bits et plus encore.
++x), binaires (deux opérandes, ex. a + b) et ternaires (trois opérandes, ex. a ? b : c).| Catégorie | Opérateurs | Exemple |
|---|---|---|
| Arithmétiques | + - * / % ++ -- | a + b, x++ |
| Relationnels | == != > < >= <= | a > b |
| Logiques | && || ! | a && b |
| Binaires (bits) | & | ^ ~ << >> | a & b, x << 2 |
| Affectation | = += -= *= /= %=… | a += 5 |
| Divers | ?: , sizeof & * -> | sizeof(int) |
1. Opérateurs arithmétiques
a. Opérateurs binaires
| Opérateur | Nom | Exemple (a=10, b=4) | Résultat |
|---|---|---|---|
+ | Addition | a + b | 14 |
- | Soustraction | a - b | 6 |
* | Multiplication | a * b | 40 |
/ | Division entière | a / b | 2 (partie entière) |
% | Modulo (reste) | a % b | 2 |
Exemple n°1 — Opérateurs arithmétiques binaires
#include <stdio.h>
int main(void)
{
int a = 10, b = 4, res;
res = a + b; printf("a+b = %d\n", res); /* 14 */
res = a - b; printf("a-b = %d\n", res); /* 6 */
res = a * b; printf("a*b = %d\n", res); /* 40 */
res = a / b; printf("a/b = %d\n", res); /* 2 — division entière */
res = a % b; printf("a mod b = %d\n", res); /* 2 — reste */
return 0;
}a+b = 14 a-b = 6 a*b = 40 a/b = 2 a mod b = 2
float ou double:int r1 = 10 / 4; /* r1 = 2 — division entière */
float r2 = 10.0 / 4; /* r2 = 2.5 — division réelle */
float r3 = (float)10 / 4; /* r3 = 2.5 — cast explicite */b. Opérateurs d'incrémentation et décrémentation
Les opérateurs ++ et -- modifient la valeur d'une variable de 1. Leur position (préfixe ou suffixe) détermine le moment de la modification.
| Opérateur | Nom | Comportement | Exemple (a=10) | res | a après |
|---|---|---|---|---|---|
a++ | Post-incrémentation | Utilise a puis incrémente | res = a++ | 10 | 11 |
++a | Pré-incrémentation | Incrémente puis utilise a | res = ++a | 11 | 11 |
a-- | Post-décrémentation | Utilise a puis décrémente | res = a-- | 10 | 9 |
--a | Pré-décrémentation | Décrémente puis utilise a | res = --a | 9 | 9 |
Exemple n°2 — Incrémentation et décrémentation
#include <stdio.h>
int main(void)
{
int a = 10, res;
/* Post-incrémentation : res reçoit l'ancienne valeur (10), puis a devient 11 */
res = a++;
printf("post++ : a = %d, res = %d\n", a, res); /* a=11, res=10 */
/* Post-décrémentation : res reçoit 11, puis a devient 10 */
res = a--;
printf("post-- : a = %d, res = %d\n", a, res); /* a=10, res=11 */
/* Pré-incrémentation : a devient 11, res reçoit la nouvelle valeur */
res = ++a;
printf("pre++ : a = %d, res = %d\n", a, res); /* a=11, res=11 */
/* Pré-décrémentation : a devient 10, res reçoit la nouvelle valeur */
res = --a;
printf("pre-- : a = %d, res = %d\n", a, res); /* a=10, res=10 */
return 0;
}post++ : a = 11, res = 10 post-- : a = 10, res = 11 pre++ : a = 11, res = 11 pre-- : a = 10, res = 10
2. Opérateurs relationnels
Les opérateurs relationnels comparent deux valeurs et retournent 1 (vrai) ou 0 (faux) en C.
| Opérateur | Signification | Exemple (a=10, b=4) | Résultat |
|---|---|---|---|
== | Égal à | a == b | 0 (faux) |
!= | Différent de | a != b | 1 (vrai) |
> | Supérieur à | a > b | 1 (vrai) |
< | Inférieur à | a < b | 0 (faux) |
>= | Supérieur ou égal | a >= b | 1 (vrai) |
<= | Inférieur ou égal | a <= b | 0 (faux) |
Exemple n°3 — Opérateurs relationnels
#include <stdio.h>
int main(void)
{
int a = 10, b = 4;
printf("a > b : %d\n", a > b); /* 1 */
printf("a >= b : %d\n", a >= b); /* 1 */
printf("a < b : %d\n", a < b); /* 0 */
printf("a <= b : %d\n", a <= b); /* 0 */
printf("a == b : %d\n", a == b); /* 0 */
printf("a != b : %d\n", a != b); /* 1 */
return 0;
}a > b : 1 a >= b : 1 a < b : 0 a <= b : 0 a == b : 0 a != b : 1
= et == = est l'affectation, == est la comparaison. Écrire =dans une condition effectue une affectation et retourne la valeur affectée — ce qui est souvent vrai (non nul) :/* Incorrect — affecte 5 à a, condition toujours vraie */
if (a = 5)
printf("toujours exécuté\n");
/* Correct — compare a à 5 */
if (a == 5)
printf("exécuté si a vaut 5\n");3. Opérateurs logiques
Les opérateurs logiques combinent des conditions booléennes. En C, toute valeur non nulle est vraie, zéro est faux.
| Opérateur | Nom | Résultat vrai si… | Table de vérité (résumé) |
|---|---|---|---|
&& | ET logique | Les deux opérandes sont vrais | V && V → V ; sinon → F |
|| | OU logique | Au moins un opérande est vrai | F || F → F ; sinon → V |
! | NON logique | L'opérande est faux | !0 → 1 ; !non-nul → 0 |
Exemple n°4 — Opérateurs logiques
#include <stdio.h>
int main(void)
{
int a = 10, b = 4, c = 10, d = 20;
/* ET logique — les DEUX conditions doivent être vraies */
if (a > b && c == d)
printf("ET : a>b ET c==d\n");
else
printf("ET : condition non satisfaite\n"); /* c != d */
/* OU logique — au moins UNE condition suffit */
if (a > b || c == d)
printf("OU : a>b OU c==d\n"); /* a > b est vraie */
else
printf("OU : aucune condition satisfaite\n");
/* NON logique — inverse la valeur de vérité */
if (!a)
printf("NON : a est zéro\n");
else
printf("NON : a est différent de zéro\n"); /* a=10 ≠ 0 */
return 0;
}ET : condition non satisfaite OU : a>b OU c==d NON : a est différent de zéro
&& et ||évaluent les opérandes de gauche à droite et s'arrêtent dès que le résultat est déterminé :A && B: siAest faux,Bn'est pas évaluéA || B: siAest vrai,Bn'est pas évalué
if (ptr != NULL && ptr->valeur > 0)
printf("%d\n", ptr->valeur);
/* Si ptr == NULL, ptr->valeur n'est jamais évalué */Récapitulatif
| Catégorie | Opérateurs clés | Retourne | Piège courant |
|---|---|---|---|
| Arithmétiques binaires | + - * / % | Valeur numérique | 10/4 = 2 (division entière) |
| Pré-incrémentation | ++x, --x | Nouvelle valeur | Modifie avant utilisation |
| Post-incrémentation | x++, x-- | Ancienne valeur | Modifie après utilisation |
| Relationnels | == != > < >= <= | 0 ou 1 | Confondre = et == |
| ET logique | && | 0 ou 1 | Court-circuit — 2e opérande non évalué si 1er faux |
| OU logique | || | 0 ou 1 | Court-circuit — 2e opérande non évalué si 1er vrai |
| NON logique | ! | 0 ou 1 | !0 = 1, !non-nul = 0 |
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.