Les opérateurs sont le fondement même du traitement des opérations mathématique et comparatif de n'importe quel langage, le C ne fait pas exception. En langage de programmation C, par contre, les opérateurs sont essentiellement centrés sur les opérations mathématiques sur des nombres entiers ou réels. Il faut également utiliser des opérateurs pour la manipulation des pointeurs, le décalage de bits, certains types de comparaison,...
Les opérateurs de type entier
Opérateur | Description |
---|---|
== | Comparaison d'un égalité |
!= | Comparaison d'une différence |
> | Comparaison de plus grand que |
>= | Comparaison de plus grand ou égal que |
< | Comparaison de plus petit que |
<= | Comparaison de plus petit ou égal que |
+ | Effectue une addition |
- | Effectue une soustraction |
* | Effectue une multiplication |
/ | Effectue une division |
% | Effectue le reste d'une division (modulo) |
++ | Effectue une incrémentation |
-- | Effectue une décrémentation |
<< | Effectue un décalage à gauche |
>> | Effectue un décalage à droite |
! | Effectue une «négation binaire» |
& | Effectue un «Et binaire» |
| | Effectue un «Ou binaire» |
^ | Effectue un «Ou exclusif binaire» |
+= | Affectation de l'entier par une addition |
-= | Affectation de l'entier par une soustraction |
*= | Affectation de l'entier par une multiplication |
/= | Affectation de l'entier par une division |
<<= | Affectation de l'entier par un décalage à gauche |
>>= | Affectation de l'entier par un décalage à droite |
%= | Affectation de l'entier par un reste d'une division (modulo) |
&= | Affectation de l'entier par un «Et binaire» |
|= | Affectation de l'entier par un «Ou binaire» |
^= | Affectation de l'entier par un «Ou exclusif binaire» |
Les opérateurs de type réel (à virgule flottante)
Opérateur | Description |
---|---|
== | Comparaison d'un égalité |
!= | Comparaison d'une différence |
> | Comparaison de plus grand que |
>= | Comparaison de plus grand ou égal que |
< | Comparaison de plus petit que |
<= | Comparaison de plus petit ou égal que |
+ | Effectue une addition |
- | Effectue une soustraction |
* | Effectue une multiplication |
/ | Effectue une division |
% | Effectue le reste d'une division (modulo) |
++ | Effectue une incrémentation |
-- | Effectue une décrémentation |
+= | Affectation de la valeur réel par une addition |
-= | Affectation de la valeur réel par une soustraction |
*= | Affectation de la valeur réel par une multiplication |
/= | Affectation de la valeur réel par une division |
%= | Affectation de la valeur réel par un reste d'une division (modulo) |
Les opérateurs de type booléen
Opérateur | Description |
---|---|
== | Comparaison d'un égalité |
!= | Comparaison d'une différence |
! | Effectue une négation |
& | Effectue un «Et binaire» |
| | Effectue un «Ou binaire» |
^ | Effectue un «Ou exclusif binaire» |
&& | Effectue un «Et logique |
|| | Effectue un «Ou logique» |
Les priorités d'opération
Opérateur | Priorité |
---|---|
() [] | Premier |
-- ++ ! ~ - | Deuxième |
* / % | Troisième |
+ - | Quatrième |
<< >> | Cinquième |
< <= >= > | Sixième |
== != | Septième |
& | Huitième |
^ | Neuvième |
| | Dixième |
&& || | Onzième |
? : (opérateur ternaire) | Douzième |
+ = += -= *= /= %= <<= >>= &= ^= |= | Treizième |
L'associativité des opérateurs
Opérateur | Parité | Associativité |
---|---|---|
( ) | gauche vers la droite | |
() [] . -> | gauche vers la droite | |
! | unaire | droite vers la gauche |
~ | unaire | droite vers la gauche |
++ -- | unaire | droite vers la gauche |
- | unaire | droite vers la gauche |
(type) | unaire | droite vers la gauche |
* | unaire | droite vers la gauche |
& | unaire | droite vers la gauche |
sizeof | unaire | droite vers la gauche |
* / % | binaire | gauche vers la droite |
+ - | binaire | gauche vers la droite |
>> << | binaire | gauche vers la droite |
< <= < <= | binaire | gauche vers la droite |
== != | binaire | gauche vers la droite |
& | binaire | gauche vers la droite |
^ | binaire | gauche vers la droite |
| | binaire | gauche vers la droite |
&& | binaire | gauche vers la droite |
|| | binaire | gauche vers la droite |
? : | binaire | droite vers la gauche |
= += -= *= /= %= ^= &= |= >>= <<= | binaire | droite vers la gauche |
, | binaire | gauche vers la droite |
Remarques
- La portée d'un opérateur en langage de programmation C est souvent trop permissive, ainsi il est possible de changer la valeur d'une variable à l'intérieur d'une instruction de test conditionnelle (if, do, while). Entre autre, les débordements, les pointeurs et les conditions peuvent facilement devenir un cauchemar si le programmeur ne s'impose pas une certaine discipline. Par exemple, on recommandera d'effectuer une comparaison d'une valeur statique avant la variable, de la façon suivante afin d'éviter les erreurs :
- if ( 12 == variable) {
- /* suite du traitement
- }
- En général, lorsque le code est compilé pour des microprocesseurs de la famille 80x86, les opérateurs binaires, aussi appelé les opérateurs bit-à-bit, sont plus rapides d'exécution que les autres opérateurs et le nombre de cycles d'horloge qu'il consomme est vraiment très faible. Les opérateurs de multiplications, de division, de modulo sont extrêmement lent d'exécution, il serait donc préférable des utiliser le moins possible lorsque cela est possible.
- Les opérateurs logiques se basent essentiellement sur une table de vérité avec deux valeurs possibles VRAI ou FAUX. Le 0 devrait représenter le FAUX tandis que toutes les autres valeurs correspondent à VRAI (Table de vérité).
- En langage de programmation C pure, il y a uniquement des opérateurs d'affectation de chaine de caractères, il n'y a pas d'opérateur destiné à la modification des chaines de caractères, il faudra donc utiliser des fonctions comme strcat, strcpy, strlen, ... étant tous incluses dans le fichier d'entête «string.h».
- Si vous avez un doute dans l'ordre de priorité du traitement de vos opérateurs, il peut être judicieux d'utiliser des parenthèses, mais vous n'enlèverez pas le risque de confusion pour les opérateurs d'affectation, d'incrémentation ou de décrémentation.
Pourquoi ? C'est que si vous oublier de mettre deux symboles égales, et que vous en mettez un seul, le compilateur vous retournera une erreur !
Exemple
Voici un exemple montrant une utilisation de ces opérandes :
Essayer maintenant !
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
-
- #define false 1 == 0
- #define true 1 == 1
-
- double round(double value) {
- return floor(value + 0.5);
- }
-
- int main()
- {
- int a = 1;
- long b = 2;
- unsigned char c = 3;
- int c_ = -3;
- char S[11] = "Gladir";
- strcat(S,".com");
-
- printf("false == 0 : ");
- if((false?1:0) == 0) puts("égale");
- else puts("pas égale");
- printf("1 + 1 : %i\n", 1 + 1);
- printf("a - b : %i\n", (int) (a - b));
- printf("a * b * 20 : %i\n", (int) (a * b * 20));
- printf("2 ^ 4 : %i\n", (int) round(pow(2,4)));
- puts(S);
- return 0;
- }
on obtiendra le résultat suivant :
false == 0 : égale1 + 1 : 2
a - b : -1
a * b * 20 : 40
2 ^ 4 : 16
Gladir.com
Voir également
Mathématique - Algèbre de Boole - Table de vérité
Dernière mise à jour : Mardi, le 28 juillet 2015