Quelles sont les différents opérateurs dans le langage C

De Didaquest
Aller à la navigationAller à la recherche
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Target Icon.pngVotre Publicité sur le Réseau Target Icon.png

Le langage C intègre de nombreux opérateurs : 48 en tout ! Certains sont plus fréquents que d'autres, mais tous ont leur utilité. Le tutoriel officiel de M@teo21, comme de nombreux cours pour débutants, ne les présente pas tous car ils ne sont pas utiles pour commencer.

Ci-dessous, un grand tableau vous les représente tous. Le but n’est pas de tous les expliquer ici, mais d’en offrir une vue d’ensemble et de rappeler leur caractéristiques : arité, priorité et associativité.

• On appelle arité le nombre d’opérandes d’un opérateur. En C, elle varie de 1 à 3. 1. On dit qu’un opérateur est « unaire » s'il n’a qu’un seul opérande. Par exemple, ++ (comme dans A++) et sizeof (comme dans sizeof A) sont des opérateurs unaires. 2. De même, les opérateurs ayant deux opérandes sont dits « binaires » (rien à voir avec la base 2), 3. et ceux en ayant trois « ternaires » (il n’en existe qu’un en C, l’opérateur ? : qui s’utilise ainsi : A?B:C et qui est simplement appelé opérateur ternaire).

• La priorité des opérateurs permet de déterminer l’ordre dans lequel les opérations composant une expression seront combinées. Dans une expression comportant plusieurs opérations, celles-ci sont emboîtées de telle sorte qu’une opération serve d’opérande à une autre. Ça ne se fait pas n’importe comment, c’est la priorité qui impose la façon de lire : une opération prioritaire servira d’opérande à une opération qui l’est moins (la prioritaire est donc calculée avant).

Prenons un exemple, l’expression 5 && 0 + 3. On pourrait calculer sa valeur de deux manières :

— effectuer le ET logique puis l’addition : ( (5 && 0) + 3 ) ; — effectuer l’addition puis le ET logique : ( 5 && (0 + 3) ).

L’ordre des opérations est extrêmement important puisqu’il va déterminer la valeur de l’expression. Dans le premier cas on obtiendra 3, et dans l’autre on obtiendra 1. Grâce à la priorité, nous savons que l’addition doit s’effectuer avant le ET (l’addition est prioritaire sur le ET) et que la valeur de l’expression sera donc de 1.

• Malheureusement, la priorité des opérateurs ne suffit pas à lever toute ambigüité. En effet, que faire dans les cas où les opérateurs ont la même priorité ? Par exemple, dans l’expression 6 / 2 * 3, qui de la division ou de la multiplication doit être réalisée la première (sachant qu’elles ont la même priorité) ? — Si l’on fait la division d’abord : ( (6 / 2) * 3 ) nous donne 9. — Si l’on fait la multiplication d’abord : ( 6 / (2 * 3) ) nous donne 1. C'est ici que l’associativité intervient, en déterminant un sens de lecture. Pour les opérateurs * et /, l’associativité est de gauche à droite, donc on lit l’expression dans ce sens ; on rentre dans le premier cas et on obtient 9. L’expression pourrait être reformulée comme suit : (6 / 2) * 3. Les deux associativités possibles sont évidemment de la gauche vers la droite (left to right, ltr) et de la droite vers la gauche (right to left, rtl).

Pour contourner les règles de priorité et d’associativité (si l’on veut combiner les opérations différemment), on met des parenthèses.