Opérateurs et expressions arithmétiques en langage C

@joekakone

Joseph Konka @joekakone

03/03/2026 · 7 min

Maîtrisez les opérateurs en C : arithmétique (+, -, *, /, %), division entière et transtypage (cast), incrémentation (++), opérateurs relationnels et logiques.

Les opérateurs sont les symboles fondamentaux qui indiquent au processeur quelles transformations et calculs appliquer sur les données stockées dans vos variables. En langage C, les opérateurs se classent en plusieurs familles : arithmétiques, relationnels, logiques et d'affectation.

Cette leçon décortique leur fonctionnement et met en garde contre les pièges classiques, notamment la division entière et la priorité des opérations.


1. Les opérateurs arithmétiques#

Le langage C dispose des cinq opérations arithmétiques de base :

Opérateur Signification Exemple Résultat
+ Addition 7 + 3 10
- Soustraction 10 - 4 6
* Multiplication 6 * 7 42
/ Division 14 / 2 7
% Modulo (reste de la division entière) 17 % 5 2 (car \(17 = 3 \times 5 + 2\))

[!NOTE] L'opérateur modulo % ne s'applique qu'exclusivement aux nombres entiers (int, char, long). Tenter d'effectuer 7.5 % 2 provoquera une erreur de compilation.


2. Le piège majeur de la division entière en C#

En langage C, lorsque les deux opérandes d'une division sont de type entier, le compilateur applique obligatoirement une division entière en tronquant brutalement la partie décimale :

int a = 5;
int b = 2;
float resultat = a / b; // Résultat : 2.000000 et NON 2.5 !

Pourquoi ? Parce que l'expression a / b est d'abord évaluée entre deux entiers, produisant l'entier 2. Ce n'est qu'ensuite que cette valeur 2 est convertie en flottant 2.0 pour être stockée dans resultat.

La solution : Le transtypage explicite (Cast)#

Pour forcer une division réelle à virgule, au moins l'un des deux opérandes doit être un nombre à virgule flottante :

// Méthode 1 : Transtypage explicite (Cast)
float resultat = (float)a / b; // Résultat : 2.500000

// Méthode 2 : Utiliser un littéral flottant
float moyenne = (note1 + note2) / 2.0f;

3. Incrémentation et Décrémentation (++ et --)#

Pour ajouter ou soustraire 1 à une variable, le C propose une syntaxe concise :

  • i++ (Post-incrémentation) : utilise d'abord la valeur courante de i, puis incrémente i de 1.
  • ++i (Pré-incrémentation) : incrémente d'abord i de 1, puis utilise la nouvelle valeur.
Différence entre pré et post-incrémentation
#include <stdio.h>

int main(void)
{
    int x = 5;
    int y = x++; // y reçoit 5, puis x devient 6

    int a = 5;
    int b = ++a; // a devient 6, puis b reçoit 6

    printf("Post-incrementation : x = %d, y = %d\n", x, y);
    printf("Pre-incrementation  : a = %d, b = %d\n", a, b);

    return 0;
}

4. Opérateurs d'affectation combinée#

Le C permet de combiner une opération arithmétique et une affectation en un seul symbole :

  • score += 10; \(\Longleftrightarrow\) score = score + 10;
  • prix *= 1.20; \(\Longleftrightarrow\) prix = prix * 1.20;
  • solde -= retrait; \(\Longleftrightarrow\) solde = solde - retrait;
  • valeur %= 2; \(\Longleftrightarrow\) valeur = valeur % 2;

5. Opérateurs relationnels et logiques#

Ces opérateurs sont la clé des structures conditionnelles (if) et des boucles (while) :

Opérateurs de comparaison (Relationnels)#

Symbole Signification Exemple vrai Exemple faux
== Égal à 5 == 5 5 == 6
!= Différent de 5 != 6 5 != 5
< Strictement inférieur 3 < 7 7 < 3
> Strictement supérieur 8 > 2 2 > 8
<= Inférieur ou égal 5 <= 5 6 <= 5
>= Supérieur ou égal 5 >= 5 4 >= 5

[!WARNING] Ne confondez jamais = (affectation d'une valeur) et == (test d'égalité). Écrire if (note = 20) écrase la valeur de la note à 20 et renvoie toujours vrai !

Opérateurs logiques booléens#

  • && (ET logique) : Vrai uniquement si toutes les conditions sont vraies.
  • || (OU logique) : Vrai si au moins une des conditions est vraie.
  • ! (NON logique) : Inverse l'état logique (!true donne false).
// Éligible si l'étudiant a plus de 18 ans ET une moyenne >= 10
if (age >= 18 && moyenne >= 10.0f)
{
    printf("Candidature validee.\n");
}

6. Mise en pratique : Analyseur de nombre entier#

Énoncé : Écrivez un programme qui demande à l'utilisateur de saisir un nombre entier. Le programme doit déterminer et afficher : 1. Si le nombre est pair ou impair (à l'aide du modulo %). 2. Si le nombre est positif, négatif ou nul.

??? tip "Solution complète"

#include <stdio.h>

int main(void)
{
    int nombre = 0;

    printf("Entrez un nombre entier relatif : ");
    if (scanf("%d", &nombre) != 1)
    {
        printf("Erreur de saisie.\n");
        return 1;
    }

    // 1. Test de parité
    if (nombre % 2 == 0)
    {
        printf("Le nombre %d est PAIR.\n", nombre);
    }
    else
    {
        printf("Le nombre %d est IMPAIR.\n", nombre);
    }

    // 2. Test de signe
    if (nombre > 0)
    {
        printf("Le nombre %d est STRICTEMENT POSITIF.\n", nombre);
    }
    else if (nombre < 0)
    {
        printf("Le nombre %d est STRICTEMENT NEGATIF.\n", nombre);
    }
    else
    {
        printf("Le nombre saisi est NUL (egal a zero).\n");
    }

    return 0;
}


Vous dominez désormais les calculs et comparaisons. Passons aux structures de répétition avec les boucles for, while et do ... while.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue