Avant-gardes et nouvelles expressions artistiques Introduction.
Expressions et affectation
description
Transcript of Expressions et affectation
B.Shishedjiev - Affectation 1
Expressions et affectation
Comment produire des nouvelles valeurs
B.Shishedjiev - Affectation 2
Expressions• L’expression est un élément du langage qui produit
une règle comment calculer une nouvelle valeur à l’aide des opérandes et opérateurs▪ Les opérateurs donnent les instructions comment obtenir
la valeur;▪ Les opérandes sont les données sur lesquelles les
opérateurs agissent.
• Exécuter une expression – c’est de:▪ Produire une valeur
▪ Calculer la valeur depuis les opérandes▪ Eventuellement changer la valeur d’un ou plusieurs
opérandes▪ Déterminer le type de la valeur produite
B.Shishedjiev - Affectation 3
Types d’opérateurs• Opérateurs unaires ( ++ -- sizeof - (type) ! )
Ils peuvent être préfixe ( !x ) ou postfixe ( x++ )• Opérateurs binaires ( + - * / && || )
Ils ont deux opérandes ( x + y )• Opérateurs ternaires( ?: )
z ? x : y
B.Shishedjiev - Affectation 4
Priorité et associativité• Ils gèrent l’ordre dans lequel sont evalués les
opérateurs individuels quand l’expression comporte plusieurs opérateurs.
• Les opérateurs avec priorité supérieure sont évalués avant ceux avec une priorité inférieure.
• Quand ils sont de même priorité ils sont évalués selon le sens de l’associativité.
• On peut changer l’ordre à l’aide de parenthèses.
B.Shishedjiev - Affectation 5
Les opérateurs de CPrio Opérateurs Sens de l'associativité
15 () [] -> . gauche à droit
14 ! ~ +(un)-(un)++ -- &(un) *( un) (type) sizeof droit à gauche
13 *(bin) / % gauche à droit
12 +(bin) -(bin) gauche à droit
11 << >> gauche à droit
10 < <= > >= gauche à droit
9 == != gauche à droit
8 &(bin) gauche à droit
7 ^ gauche à droit
6 | gauche à droit
5 && gauche à droit
4 || gauche à droit
3 ?: droit à gauche
2 = *= /= %= += -= &= ^= != <<= >>= droit à gauche
1 , gauche à droit
B.Shishedjiev - Affectation 6
Expressions arithmétiques• Opérateurs d’addition
▪ addition + ▪ soustraction -
• Opérateurs de multiplication▪ multiplication * ▪ division / ▪ modulo (le reste de division entière) %
• Opérateurs unaires ▪ moins unaire -
• Type de résultat Opé-
randesint float
int int float
float float float
B.Shishedjiev - Affectation 7
Expressions arithmétiques• Fonctions standards
▪ Mathématiques▪ Entiers
abs(i), labs(l), div(i),ldiv(l), rand(), random(i), randomize()
▪ Doublefabs(x) = |x|, sqrt(x)=x,pow(x,y)= xy, pow10(x)=10x, log(x)=ln x, exp(x)= ex, log10(x)=log10x, sin(x), sinh(x), cos(x), cosh(x), tan(x), asin(x), acos(x), atan(x), ceil(x), floor(x),
B.Shishedjiev - Affectation 8
Expressions arithmétiques…• Exemplesint a=2,b =5,c =4;double x=2.5,y=1.,z=3.1;char h = ‘A’;
a+b-c3*(a-b)b/2b/2.b % aa + b + za + -bb / -y *zh+2
Résultat 3
Résultat -9
Résultat 2
Résultat 2.5
Résultat 1
Résultat 10.1
Résultat -3
Résultat -15.5
Résultat ‘C’ ou 67
B.Shishedjiev - Affectation 9
Expressions arithmétiques…• Exemples
a b
c d
(a+b)/(c+d)
12 2 3
1
2 2
2
xx x tgx
e x
sin cos
(1+x)*sqrt((2*sin(2*x)+pow(cos(x),2)-3*tan(x*x))/(1-exp(2+x)))
B.Shishedjiev - Affectation 10
Affectation simple• Syntaxe
Lvalue est un objet qui peut contenir une valeur (une variable ou une expression qui vaut une adresse de la mémoire)
RValue vaut une valeur (la valeur d’une variable ou une expression qui produit une valeur)
• Exécution de l’opérateur d’affectation▪ Calcule l’expression de Rvalue et obtient sa valeur▪ Enregistre la valeur dans Lvalue▪ Le résultat est la valeur enregistrée.
<Lvalue> = <Rvalue>
B.Shishedjiev - Affectation 11
Affectation simple• Exemples
int a,b,c;
int d = 3;
a = 5;
b = 3+a;
c = a = b;
4=a;a+b=c;
Declarer les variables sans spécifier leur valeur Mémoire
b ?
c ?
d 3
5a ?Declarer la variable avec initialisation
Affectations simples
Affectations multiples l’associativité est de droit à gauche
8
8
8
Instructions invalides
B.Shishedjiev - Affectation 12
Opérateurs incrémentaux • Opérateurs de
préincrément et de prédécrement
L'opérande doit être une Lvalue
• Opérateurs de postincrément et de postdécrement
int a =5,b=3,c=1;a = 5 + ++c;c = 2 * -- b;
Mémoire
b 3
c 1
a 57
2
24
int a =5,b=3,c=1;a = 5 + c++;c = 2 * b--;a++;--c;
b 3
c 1
a 57
2
2
6
65
B.Shishedjiev - Affectation 13
Expressions booléennes• Opérateurs comparatifs
ils rendent 1 si la comparaison est vraie et 0 si elle est fausse
< < >=
> > == =
<= !=
a < 5b>= 9.5a+b != c/d
• Opérateurs logiques
a b ! b a && b a || b
0 0 1 0 0
0 1 0 0 1
1 0 1 0 1
1 1 0 1 1
x < 5 && x > 2y>= 9.5 || y <= 3.2a && b || !a && !b
B.Shishedjiev - Affectation 14
Expressions booléennes• Exécution en raccourci
x < 5 && x++ > 2
x > 5 || x++ < 2
Avant: x =3 Après: Resultat vrai x = 4
Avant: x =6 Après: Resultat faux x = 6
Avant: x =3 Après: Resultat faux x = 4
Avant: x =6 Après: Resultat vrai x = 6
B.Shishedjiev - Affectation 15
Expression conditionnelle• Syntaxe
condition ? expression-1 : expression-2
• Exemple int a = 2,b =4,c = -3;int d;
d = a>b ? a : b;
d = c>=0 ? c : -c;
d = (a != b ? 5 : 1) * 2;
d = 4
d = 3
d = 10
B.Shishedjiev - Affectation 16
Opérateurs sur les pointeurs • Indirection
(déréférence) * - délivre la valeur pointée.
• Adresse &délivre l’adresse d’une variable
Mémoire
pi ?
j ?
int j, *pi; j = 10; pi = &j; *pi = 12;
101226
Nom Adresse Valeur
30 26
B.Shishedjiev - Affectation 17
Affectation étendueCette affectation est appelée encore élargie ou complexe• Syntaxe
exp1 = exp2
où est + - * / etc.
exp1 = exp1 exp2
• Exemples
int a = 2,b =4,c = -3;
a += 5
b *= a-2
c += a>b ? a-b : b-a
a = 7
b=20
c=10
B.Shishedjiev - Affectation 18
L’opérateur sizeof• Sizeof rend la taille de son opérande en octets• Exemples
int a = 2,b =4,c = -3;short i;long j;float x;double z;a = sizeof i;b = sizeof z/ sizeof x;c = sizeof(int);
a = 2
b=2
c=2
B.Shishedjiev - Affectation 19
Conversion des types• Conversion impliciteint a = 2,b =4,c = -3;short i = 4; long j=35897float x =3.2; double z = -4.5;char d = ‘A’;a = j;b = x;c = z;x = 5;c = d;d = 66;
a = -29912
b=3
c=-4
x = 5.0
c=65
d=‘B’
B.Shishedjiev - Affectation 20
Conversion des types• Conversion explicite – cast opérateur (type)
int a = 2,b =4;unsigned c = -3;short i = 4; long j=35897float x =3.2; double z = -4.5;char d = ‘A’;x = (float)c/2;b = (int)x;c = (unsigned int) j;a = (int)x/2;
x = -1.5
b=3
c=35897
a = 1