« Programmation C/Opérateurs » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 13 :
Les expressions en C sont en fait très génériques, elles peuvent inclure des opérations arithmétiques classiques (addition, soustraction, division, modulo, ...), des expressions booléennes (OU logique, ET logique, OU exclusif, ...), des comparaisons (égalité, inégalité, différence, ...) et même des affectations (copie, auto-incrément, ...). Toutes ces opérations peuvent s'effectuer en une seule expression, il suffit d'appliquer les bons opérateurs sur les bons opérandes.
Les opérateurs binaires et ternaires utilisent une notation infixe (l'opérateur se trouve entre les 2 ou 3 opérandes). Les opérateurs unaires s'écrivent de manière préfixé (avant l'opérande), à l'exception des opérateurs <code>++</code> et <code>--</code> qui peuvent s'écrire de manière préfixée ou
La '''priorité''' (quel opérateur est appliqué avant, en l'absence de parenthèses explicite) et l'<b>associativité</b> (dans quel ordre sont traités les arguments des opérateurs ayant la même priorité) sont résumées dans la table suivante (par ordre décroissant de priorité - les opérateurs décrits dans un autre chapitre ont un lien dédié) :
Ligne 141 :
=== Post/pré incrémentation/décrémentation ===
C'est un concept quelque peu sibyllin du C. Incrémenter ou décrémenter de un est une opération extrêmement courante. Écrire à chaque fois '<code>variable = variable + 1</code>' peut-être très pénible à longue. Le langage C a donc introduit des opérateurs raccourcis pour décrémenter ou incrémenter n'importe quel type atomique (gérable directement par le processeur : c'est à dire pas un tableau, ni une structure ou une union). Il s'agit des opérateurs '<code>++</code>' et '<code>--</code>', qui peuvent être utilisés de manière préfixée ou
Utilisé de manière préfixée, l'opérateur incrémente/décrémente la variable, puis retourne la valeur de celle-ci. En fait, les expressions <code>(++E)</code> et <code>(--E)</code> sont équivalentes respectivement aux expressions <code>(E+=1)</code> et <code>(E-=1)</code>.
Par contre, utilisé de manière
<source lang="c">
Ligne 252 :
</source>
Dans cet exemple, il y a un seul caractère <code>=</code> entre <code>a</code> et <code>b</code>, donc on ne teste pas si <code>a</code> est égal à <code>b</code>, mais on '''affecte''' la valeur de la variable <code>b</code> à la variable <code>a</code>. Le résultat de l'expression étant 2, elle est donc toujours considérée vraie. Ce genre de raccourci est en général à éviter. En effet, il est facile de faire une faute de frappe et d'oublier de taper un
<source lang="c">
/* On veut faire une affectation ici. */
/*
if ((a = b))
{
|