Expressions et affectation

Post on 08-Jan-2016

17 views 0 download

description

Expressions et affectation. Comment produire des nouvelles valeurs. 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; - PowerPoint PPT Presentation

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