Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :

next up previous contents index
Next: Les instructions les plus Up: Les bases Previous: Déclarations de variables ayant

Sous-sections

Les opérateurs les plus usuels

L'affectation

  En C, l'affectation est un opérateur et non pas une instruction.

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ lvalue = expression

Dans le jargon C, une lvalue est une expression qui doit délivrer une variable (par opposition à une constante).   Une lvalue peut être par exemple une variable simple, un élément de tableau, mais pas une constante. Cette notion permet d'exprimer dans la grammaire l'impossibilité d'écrire des choses du genre 1 = i qui n'ont pas de sens.

Exemples d'affectation :

i = 3
f = 3.4
i = j + 1

$\bullet$
Sémantique :

L'opérateur d'affectation a deux effets :

1.
il réalise un effet de bord   consistant à affecter la valeur de expression à la variable désignée par la lvalue ;

2.
il délivre la valeur ainsi affectée, valeur qui pourra être utilisée dans une expression englobant l'affectation.
Exemple :
i = (j = k) + 1
La valeur de k est affectée à j et cette valeur est le résultat de l'expression (j = k) ; on y ajoute 1 et le résultat est affecté à i.

$\bullet$
Conversions de type :

Lorsque la valeur de l'expression est affectée à la lvalue, la valeur est éventuellement convertie dans le type de la lvalue.   On peut par exemple affecter une expression entière à un flottant.

L'addition

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ + expression
$\Rightarrow$ expression1 + expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées, l'addition réalisée, et la valeur obtenue est la valeur de l'expression d'addition. (La sémantique de + expression est celle de 0 + expression).

L'ordre dans lequel les deux expressions sont évaluées, n'est pas déterminé. Si expression1 et expression2 font des effets de bords, on n'est donc pas assuré de l'ordre dans lequel ils se feront.  

Après évaluation des expressions, il peut y avoir conversion de type de l'un des opérandes, de manière à permettre l'addition. On pourra par exemple faire la somme d'une expression délivrant un flottant et d'une expression délivrant un entier : l'entier sera converti en flottant et l'addition sera réalisée entre flottants.

La soustraction

 

$\bullet$
Syntaxe :

L'opérateur peut être utilisé de manière unaire ou binaire :

expression :
$\Rightarrow$ - expression
$\Rightarrow$ expression1 - expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées, la soustraction réalisée, et la valeur obtenue est la valeur de l'expression soustraction. (La sémantique de - expression est celle de 0 - expression).

Les mêmes remarques concernant l'ordre d'évaluation des opérandes ainsi que les éventuelles conversions de type faites au sujet de l'addition s'appliquent à la soustraction.

La multiplication

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 * expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées, la multiplication réalisée, et la valeur obtenue est la valeur de l'expression multiplicative.

Les mêmes remarques concernant l'ordre d'évaluation des opérandes ainsi que les éventuelles conversions de type faites au sujet de l'addition s'appliquent à la multiplication.

La division

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 / expression2

$\bullet$
Sémantique :

Contrairement à d'autres langages, le langage C ne dispose que d'une seule notation pour désigner deux opérateurs différents : le signe / désigne à la fois la division entière et la division entre flottants.

Si expression1 et expression2 délivrent deux valeurs entières, alors il s'agit d'une division entière. Si l'une des deux expressions au moins délivre une valeur flottante, il s'agit d'une division entre flottants.

Dans le cas de la division entière, si les deux opérandes sont positifs, l'arrondi se fait vers zéro, mais si au moins un des deux opérandes est négatif, la façon dont se fait l'arrondi dépend de l'implémentation (mais il est généralement fait vers zéro).   Exemple : 13 / 2 délivre la valeur 6 et -13 / 2 ou 13 / -2 peuvent délivrer -6 ou -7 mais le résultat sera généralement -6.

Les remarques concernant l'ordre d'évaluation des opérandes faites au sujet de l'addition s'appliquent également à la division. Les remarques concernant les éventuelles conversion de type faites au sujet de l'addition s'appliquent à la division entre flottants.

L'opérateur modulo

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 % expression2

$\bullet$
Sémantique :

Les deux expressions sont évaluées et doivent délivrer une valeur de type entier, on évalue le reste de la division entière de expression1 par expression2 et la valeur obtenue est la valeur de l'expression modulo.

Si au moins un des deux opérandes est négatif, le signe du reste dépend de l'implémentation, mais il est généralement pris du même signe que le dividende. Exemples :
13 % 2 délivre 1
-13 % 2 délivre généralement -1
13 % -2 délivre généralement 1.

Les choix d'implémentation faits pour les opérateurs division entière et modulo doivent être cohérents, en ce sens que l'expression :
b * (a / b) + a % b (où a et b sont des entiers)
doit avoir pour valeur a.

Les opérateurs de comparaison

 

$\bullet$
Syntaxe :

expression :
$\Rightarrow$ expression1 opérateur expression2
opérateur peut être l'un des symboles suivants :

opérateur sémantique
> strictement supérieur
< strictement inférieur
>= supérieur ou égal
<= inférieur ou égal
== égal
!= différent
           

$\bullet$
Sémantique :

Les deux expressions sont évaluées puis comparées, la valeur rendue est de type int et vaut 1 si la condition est vraie, et 0 sinon.

On remarquera que le type du résultat est int, car le type booléen n'existe pas.  


next up previous contents index
Next: Les instructions les plus Up: Les bases Previous: Déclarations de variables ayant
Bernard Cassagne
1998-12-09
Contacter le responsable de la rubrique C