Introduction
Le langage C est certainement l'un des langages les plus fournis en opérateurs. Cette richesse se manifeste
tout d'abord au niveau des opérateurs classiques (arithmétiques, relationnels, logiques) ou moins
classiques (manipulations de bits)
Les opérateurs
Les opérateurs arithmétiques :
• - : changement de signe
• * : Multiplication
• / : Division
• % : Modulo (reste de la division de deux entiers)
• + : Addition
• - : Soustraction
Les opérateurs unaires + et - ont la priorité la plus élevée. On trouve ensuite, à un même niveau, les
opérateurs *, / et %. Enfin, sur un dernier niveau, apparaissent les opérateurs binaires + et -. En cas de
priorités identiques, les calculs s'effectuent de "gauche à droite". On dit que l'on a affaire à une
"associativité de gauche à droite".
Remarque : Une valeur de type caractère peut être considérée de deux façons:
- comme le caractère concerné: a, Z, fin de ligne....
- comme le code ASCII de ce caractère par exemple le caractère A est représenté par 69 ainsi :c =’A’ ;
b=c+1 ; affecte 70 à b.
Les opérateurs relationnels :
Ces opérateurs binaires (vrai ou faux) permettent d’établir des conditions logiques en comparant leurs
deux opérandes.
• == test si égal
• != test si différent
• < test si inférieur
• <= test si inférieur ou égal
• > test si supérieur
• >= test si supérieur ou égal
Les opérateurs logiques:
Ces opérateurs permettent les opérations booléennes classiques sur des conditions logiques.
• ! Négation logique d’une condition
• && ET logique de conditions
• || OU logique de conditions
Opérateur d’incrémentation
Incrémentation préfixée/postfixée.
• a++ est équivalent à a=a+1;
• b=a++; est équivalent à b=a; puis a=a+1;
Langage C
9
• b=++a; est équivalent à a=a+1; puis b=a;
On dit que ++ est :
-un opérateur de pré incrémentation lorsqu'il est placé à gauche de la "lvalue" sur laquelle il porte,
-un opérateur de post incrémentation lorsqu'il est placé à droite de la "lvalue" sur laquelle il porte
Les opérateurs d’affectation élargie
C dispose d'opérateurs encore plus puissants. Ainsi, vous pourrez remplacer:
• i = i + k par : i += k
• a = a*b par : a *= b.
D'une manière générale, C permet de condenser les affectations de la forme :
lvalue = lvalue opérateur expression en : lvalue opérateur= expression
Cette possibilité concerne tous les opérateurs binaires arithmétiques. Voici la liste complète de tous ces
nouveaux opérateurs nommés "opérateurs d'affectation élargie": += -= *= /= %= |= ...
Opérateur conditionnel
a?b:c Vaut la valeur de b si a est vrai, c sinon.
Exemples :
• a = 2+3
o valeur de a: 5
• r = 3%2
o valeur de a: 1
• a = (3= =3)
o valeur de a: 1
• a = (6= =5)
o valeur de a: 0
• a = (2!=3)
o valeur de a: 1
• a = (6<=3)
o valeur de a: 0
• a = !1
o valeur de a: 0
• a =((3= =3) || (6<=3))
o valeur de a: 1
• a =((3==3) && (6<=3))
o valeur de a: 0
• i=1; a=i++;
o valeur de a: 1 et de i :2
• i=1; a=++i;
o valeur de a: 2 et de i :2
Les conversion d'ajustement de type
Dans les expressions mixtes (dans lesquelles interviennent des opérandes de types différents), le
compilateur procède à une conversion de type telle que int -> float. Une telle conversion se fait suivant
une "hiérarchie" qui permet de ne pas dénaturer la valeur initiale5, à savoir :
int -> long -> float -> double -> long double
Langage C
10
On peut bien sûr convertir directement un int en double ; en revanche, on ne pourra pas convertir un
double en float ou en int.
Exemple : si n est de type int, p de type long et x de type float, l'expression :
n * p + x
sera évaluée suivant ce schéma :
n * p + x
| | |
long | | conversion de n en long
| | |
|__ * __| | multiplication par p
| |
long | le résultat de * est de type long
| |
float | il est converti en float pour être additionné à x
| |
|___ + __ _|
|
float ce qui fournit un résultat de type float
Le langage C est certainement l'un des langages les plus fournis en opérateurs. Cette richesse se manifeste
tout d'abord au niveau des opérateurs classiques (arithmétiques, relationnels, logiques) ou moins
classiques (manipulations de bits)
Les opérateurs
Les opérateurs arithmétiques :
• - : changement de signe
• * : Multiplication
• / : Division
• % : Modulo (reste de la division de deux entiers)
• + : Addition
• - : Soustraction
Les opérateurs unaires + et - ont la priorité la plus élevée. On trouve ensuite, à un même niveau, les
opérateurs *, / et %. Enfin, sur un dernier niveau, apparaissent les opérateurs binaires + et -. En cas de
priorités identiques, les calculs s'effectuent de "gauche à droite". On dit que l'on a affaire à une
"associativité de gauche à droite".
Remarque : Une valeur de type caractère peut être considérée de deux façons:
- comme le caractère concerné: a, Z, fin de ligne....
- comme le code ASCII de ce caractère par exemple le caractère A est représenté par 69 ainsi :c =’A’ ;
b=c+1 ; affecte 70 à b.
Les opérateurs relationnels :
Ces opérateurs binaires (vrai ou faux) permettent d’établir des conditions logiques en comparant leurs
deux opérandes.
• == test si égal
• != test si différent
• < test si inférieur
• <= test si inférieur ou égal
• > test si supérieur
• >= test si supérieur ou égal
Les opérateurs logiques:
Ces opérateurs permettent les opérations booléennes classiques sur des conditions logiques.
• ! Négation logique d’une condition
• && ET logique de conditions
• || OU logique de conditions
Opérateur d’incrémentation
Incrémentation préfixée/postfixée.
• a++ est équivalent à a=a+1;
• b=a++; est équivalent à b=a; puis a=a+1;
Langage C
9
• b=++a; est équivalent à a=a+1; puis b=a;
On dit que ++ est :
-un opérateur de pré incrémentation lorsqu'il est placé à gauche de la "lvalue" sur laquelle il porte,
-un opérateur de post incrémentation lorsqu'il est placé à droite de la "lvalue" sur laquelle il porte
Les opérateurs d’affectation élargie
C dispose d'opérateurs encore plus puissants. Ainsi, vous pourrez remplacer:
• i = i + k par : i += k
• a = a*b par : a *= b.
D'une manière générale, C permet de condenser les affectations de la forme :
lvalue = lvalue opérateur expression en : lvalue opérateur= expression
Cette possibilité concerne tous les opérateurs binaires arithmétiques. Voici la liste complète de tous ces
nouveaux opérateurs nommés "opérateurs d'affectation élargie": += -= *= /= %= |= ...
Opérateur conditionnel
a?b:c Vaut la valeur de b si a est vrai, c sinon.
Exemples :
• a = 2+3
o valeur de a: 5
• r = 3%2
o valeur de a: 1
• a = (3= =3)
o valeur de a: 1
• a = (6= =5)
o valeur de a: 0
• a = (2!=3)
o valeur de a: 1
• a = (6<=3)
o valeur de a: 0
• a = !1
o valeur de a: 0
• a =((3= =3) || (6<=3))
o valeur de a: 1
• a =((3==3) && (6<=3))
o valeur de a: 0
• i=1; a=i++;
o valeur de a: 1 et de i :2
• i=1; a=++i;
o valeur de a: 2 et de i :2
Les conversion d'ajustement de type
Dans les expressions mixtes (dans lesquelles interviennent des opérandes de types différents), le
compilateur procède à une conversion de type telle que int -> float. Une telle conversion se fait suivant
une "hiérarchie" qui permet de ne pas dénaturer la valeur initiale5, à savoir :
int -> long -> float -> double -> long double
Langage C
10
On peut bien sûr convertir directement un int en double ; en revanche, on ne pourra pas convertir un
double en float ou en int.
Exemple : si n est de type int, p de type long et x de type float, l'expression :
n * p + x
sera évaluée suivant ce schéma :
n * p + x
| | |
long | | conversion de n en long
| | |
|__ * __| | multiplication par p
| |
long | le résultat de * est de type long
| |
float | il est converti en float pour être additionné à x
| |
|___ + __ _|
|
float ce qui fournit un résultat de type float
Jeu 28 Nov - 8:07 par arsenepoutsi
» CCNA version 4 français
Dim 31 Mar - 15:15 par kadhouceeee
» Trés important " Livre exercices en langage C ( claude delannoy) "
Jeu 27 Sep - 16:31 par latifa oustouh
» Ulead VideoStudio 11.5.0157.2 Plus + Crack Collection
Jeu 26 Avr - 9:51 par miloduvi
» Langage IDL(Interface Definition Language)
Mar 27 Sep - 13:02 par Abdelkhalek Bakkari
» demande cours PHP
Jeu 2 Juin - 11:23 par elasriahmed
» exemple page web réaliser avec du html et JavaScript
Lun 30 Mai - 4:05 par ouh.rouchan.zakaria
» cours group2_ 2année 2011
Dim 20 Mar - 15:35 par El Maligno Angelo
» Cours : Infrastructures Réseaux 2003 Server
Mar 15 Fév - 6:55 par jettjackson
» cours officiel de CCNA 2
Mar 18 Jan - 13:53 par agares