Opérateurs et expressions

Approfondir : Opérateurs et expressions

Les opérateurs permettent de calculer, comparer, affecter et combiner des conditions. Comprendre une expression suppose de connaître le type des opérandes, les règles de priorité et les éventuels effets de bord. Cette page remplace le contenu d’erreur de l’ancienne adresse.

Calculs arithmétiques et types

+, -, * et / calculent une somme, une différence, un produit et un quotient. Entre deux entiers, la division supprime la partie fractionnaire en tronquant vers zéro : 7/2 vaut 3 et -7/2 vaut -3. Le reste % est réservé aux entiers. Avec un diviseur non nul et des opérations représentables, quotient et reste vérifient a=(a/b)*b+a%b. Pour une division réelle, employer par exemple 7.0/2.

Affectation et comparaisons

= écrit dans une variable. += combine une addition et une affectation : total += prix met à jour total. Les comparaisons ==, !=, <, <=, > et >= produisent 0 ou 1. Pour vérifier un intervalle, écrire x >= 0 && x <= 20, jamais une double inégalité mathématique directement traduite.

Logique et court-circuit

&& signifie et, || ou, ! non. Le et n’évalue son second opérande que si le premier est vrai ; le ou ne l’évalue que si le premier est faux. Ainsi b != 0 && a/b > 2 n’effectue pas la division lorsque b vaut zéro. Cette protection dépend de l’ordre écrit. Ne pas confondre ces opérateurs avec & et |, qui servent aux opérations bit à bit.

Priorité, parenthèses et effets de bord

La multiplication est prioritaire sur l’addition : 2+3*4 donne 14 ; (2+3)*4 donne 20. Les parenthèses expliquent le regroupement mais n’imposent pas, à elles seules, un ordre d’évaluation de tous les opérandes. ++i produit la valeur après incrémentation ; i++ produit la valeur antérieure. Éviter plusieurs modifications du même objet dans une expression non séquencée : ++i + i++ a un comportement indéfini.

Le conditionnel et les limites

condition ? valeur_vraie : valeur_fausse choisit une des deux expressions ; seule la branche retenue est évaluée. Il est utile pour un maximum court, mais un if est souvent plus clair pour plusieurs actions. Une bonne expression doit aussi rester dans le domaine de ses types : un débordement d’entier signé n’est pas un mécanisme de calcul valide, et diviser par zéro n’est pas permis. Pour les opérations sur les bits, utiliser des types non signés et des décalages dont l’amplitude est valide.

Reconnaître une famille d’opérateurs
FamilleOpérateursRésultat ou effet
Arithmétique+ - * / %Calcul selon les types
Comparaison== != < <= > >=0 ou 1
Logique&& || !0 ou 1, avec court-circuit pour && et ||
Affectation= += -= *= /=Modifie l’opérande de gauche
Bit à bit& | ^ ~ << >>Manipule les bits des entiers
Conditionnel?:Choisit une expression

Opérateurs : calculer et choisir

#include <stdio.h>
int main(void) {
    int a = 7, b = 2, maximum;
    printf("Quotient entier = %d\n", a / b);
    printf("Reste = %d\n", a % b);
    printf("Quotient reel = %.1f\n", (double)a / b);
    maximum = (a > b) ? a : b;
    printf("Maximum = %d\n", maximum);
    printf("Dans [0, 10] = %d\n", a >= 0 && a <= 10);
    return 0;
}
Suivre le programme : Opérateurs, calculer et choisir
Instruction ou étapeExplication
a/b et a%b7=3*2+1 : le quotient vaut 3 et le reste 1.
(double)a / bLa conversion précède la division : celle-ci donne 3.5.
a>b ? a:b7>2 est vrai ; maximum reçoit a, donc 7.
a>=0 && a<=10Les deux comparaisons sont vraies ; leur conjonction vaut 1.

Sortie écran : essai 1

Les expressions n’utilisent que des valeurs définies.

Quotient entier = 3
Reste = 1
Quotient reel = 3.5
Maximum = 7
Dans [0, 10] = 1

S’entraîner et vérifier

Exercice 1. Calculer 2+3*4 et (2+3)*4.

Voir la correctionMasquer la correction

La première expression vaut 14 parce que le produit est effectué avant l’addition. La seconde vaut 20 : les parenthèses font calculer la somme avant le produit.

Exercice 2. Un nombre impair négatif vérifie-t-il toujours n%2==1 ?

Voir la correctionMasquer la correction

Non. Par exemple -3%2 vaut -1. Tester n%2 != 0 pour l’impair et n%2 == 0 pour le pair.

Exercice 3. Pourquoi ne pas proposer une sortie à z=++i+i++; ?

Voir la correctionMasquer la correction

Les modifications de i ne sont pas séquencées entre elles. Le comportement est indéfini ; il faut séparer les opérations dans des instructions successives pour exprimer l’intention.

Pratiquer avec le TD/TP 1 corrigé · Tous les exercices C.

Repère de lecture : les codes proposés utilisent des constructions disponibles en C11. Les règles du langage et de sa bibliothèque sont consultables dans les projets publics du WG14 (C11) et du WG14 (C23). Les exemples n’utilisent pas les nouveautés propres à C23.

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
★ ★ ★ ★ ★
2 votes. Moyenne 5 sur 5.

Ajouter un commentaire

Anti-spam