• Aucun résultat trouvé

Les Opérateurs et les Expressions

N/A
N/A
Protected

Academic year: 2022

Partager "Les Opérateurs et les Expressions "

Copied!
37
0
0

Texte intégral

(1)

Java

Les Opérateurs et les Expressions

Ahcène Bounceur

(2)

Pour commencer

i = 5 ;

◦ i est égal à 5

++i

◦ i est augmenté de 1

◦ i est égal à 6

k = i = 5 ;

◦ Équivalent à : k = (i = 5)

◦ Ça veut dire : on affecte la valeur 5 à i et puis on affecte la valeur de i à k ;

◦ Donc : k est égal à 5

(3)

Pour commencer

Toutes ces lignes s'appellent :

◦ Des exressions

◦ Elles ne sont pas des instructions !

Math.sqrt(5) ;

◦ Permet de calculer la racine carrée de 5

◦ Écrit tout seul ne produit pas une erreur de compilation mais il ne sert à rien

(4)

Les opérateur arithmétiques

Les opérateurs classiques binaires :

◦ + (addition)

◦ – (soustraction)

◦ * (multiplication)

◦ / (division)

Les opérateurs classiques unaires

◦ +n

◦ –n

◦ –(n+b)

(5)

Les opérateur arithmétiques

L'opéprateur %

◦ S'utilise avec des entiers ou des flottants :

◦ Il fournit le reste de la division entière de son premier opérande par son second

11%4 vaut 3

23%6 vaut 5

-11%3 vaut -2

-11%-3 vaut -2

12.5%3.5 vaut environ 3

-15.2%7.5 vaut environ -0.2

(6)

Les opérateur arithmétiques

Remarque :

◦ Le quotient de deux entiers fournit un entier

5/2 vaut 2

◦ Le quotient de deux flottant est un flottant

5.0/2.0 vaut environ 2.5

◦ x² : x*x

◦ x² : Math.pow(x,2)

(7)

La priorité relatives des opérateurs

Les opérateurs unaires

*, / et %

+ et –

En cas de priorité identique : le calcul s'effectue de gauche à droite

Pour imposer une priorité, il faut utiliser les

parenthèses

(8)

La priorité relatives des opérateurs

Exemples :

Expression Priorités

a + b * c a + ( b * c )

a * b + c % d ( a * b ) + ( c % d )

– c % d ( – c ) % d

– a + c % d ( – a ) + ( c % d )

– a / – b + c ( ( – a ) / ( – b ) ) + c – a / – ( b + c ) ( – a ) / ( – ( b + c ) )

(9)

Comportement en cas d’exception

Cas des entiers

◦ Division par zéro

Déclenche une exception :

Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:9)

(10)

Comportement en cas d’exception

Cas des flottants

◦ Les opérations sur les flottants ne provoqueront aucune exception

◦ Par contre les résultats retournée montre la nature du problème

◦ Exemple :

1e30 * 1e30 = Infinity

Infinity/0.0 = Infinity

15/0.0 = Infinity

Infinity/–Infinity = NaN (Non a Number)

(11)

Comportement en cas d’exception

Cas des flottants

◦ Affecter les infinis :

Float.POSITIVE_INFINITY ; // +

Double.POSITIVE_INFINITY ; // +

Float.NEGATIVE_INFINITY ; // –

Double.NEGATIVE_INFINITY ; // –

◦ Affecter les Nan :

Float.NaN

Double.NaN

(12)

Les conversions implicites

int n ;

int p ;

float x;

n * x + p

◦ n * x : int * float = float

◦ (n*x)+p : (float)+int = float

◦ n * x + p : float

(13)

Conversions d’ajustement

int  long  float  double

Exemple :

int n ;

long p ;

float x;

n * x + p

◦ n * x : int * long = long

◦ (n*x)+p : long + float = float

◦ n * x + p : float

(14)

Le cas du type char

Un char est codé sur 1 octet (7 bits)

◦ Il peut être utilsé pour représenter un caractère

◦ Il peut être utilisé aussi pour représenter un nombre

Conversion d'ajustement

char  int

(15)

Les opérateurs relationnels

Exemple :

◦ 2 * a > b + 5

◦ Elle peut être utilisée dans une instruction if :

if (2 * a > b + 5) …

◦ Elle peut être affectée à une variable boolénne :

boolean ok;

ok = 2 * a > b + 5

(16)

Les opérateurs relationnels

La liste des opérateurs

Opérateur Signification

<

<=

>

>=

==

!=

inférieur à

inférieur ou égal à supérieur à

supérieur ou égal à égal à

différent de

(17)

Les opérateurs relationnels

Les priorités :

◦ La priorité des opérateurs relationnels vient après celle des opérateurs arithmétiques

◦ (<, <=, >, >=) : ils ont la même priorité

◦ (== et !=) : ils ont la même priorité

Ainsi :

◦ x + y < a + 2  (x + y) < (a + 2)

(18)

Les opérateurs relationnels

Cas de infinity et Nan

double x = 5e22

if (x < Double.POSITIVE_INFINITY) … if (x < Float.POSITIVE_INFINITY) …

◦ Tous les deux sont justes.

◦ Dans la deuxième instruction le

Float.POSITIVE_INFINITY est convertie Double.POSITIVE_INFINITY

(19)

Les opérateurs relationnels

Cas des caractères

◦ Les caractères sont comparés par rapport à leur code

◦ On peut écrire :

c1 == c2

c1 == 'e'

c1 == 120

◦ L'utilisation d'unicode implique les relations suivantes :

'0'<'1'<…<‘9’<‘A’<‘B’<…<‘Z’<‘a’<‘b’<…<‘z’

(20)

Les opérateurs logiques

La liste des opérateurs logiques

Différence entre & et &&

Supposons que la condition (i<max) est vérifiée, alors : if (i < max && t[i++] != 0) … // i sera incrémenté if (i < max & t[i++] != 0) … // i ne sera pas incrémenté

Opérateur Signification

!

&

^

|

&&

||

Négation Et

Ou exclusif Ou inclusif

Et (avec court-circuit)

Ou inclusif (avec court-circuit)

(21)

Les opérateurs logiques

Priorités :

◦ Le ! est prioritaire

◦ Exemple :

! a == b

est équivalent à :

(! a) == b

Le || est moins prioritaire que le &&

Le && est moins prioritaire que le &

Ce qui donne les priorités suivantes :

◦ ! > & > ^ > | > && > ||

(22)

L’opérateur d’affectation =

Le = est le moins prioritaire de tous les autres opérateurs

◦ Donc : x = a + 3 equivaut à x = (a+3)

i = j = 5 équivaut à :

◦ j = 5

◦ i = j

Attention : le = possède une associativité de droite à gauche

(23)

L’opérateur d’affectation =

La conversion par affectation :

◦ byte  short  int  long  float  double

◦ char  int  long  float  double

Attention :

◦ Les autres conversions ne sont pas possibles

Exemple : char  short

(24)

Incrémentation et décrémentation

i = i + 1

n = n – 1

++i

Si (i = 5) alors

◦ n = ++i – 5

n = (6 – 5) = 1

++i = 6 ensuite i = 6

◦ n = i++ – 5

n = (5 – 5) = 0

i++ = 5 ensuite i = 6

(25)

Incrémentation et décrémentation

++

◦ placé à gauche : opérateur de préincrémentation

◦ placé à droite : opérateur de postcrémentation

--

◦ placé à gauche : opérateur de prédécrémentation

◦ placé à droite : opérateur de postdécrémentation

(26)

Incrémentation et décrémentation

t [i++] = 5

Si i = 3

t [3] = 5

i = 4

Attention :

byte b ;

b = b + 1 ; // erreur de compilation (parce que b+1 est un entier)

b++ ; // juste

b = (byte) (b + 1) ; // juste (cast)

Même remarque pour le type char

(27)

Affectation élargie

i = i + 1

◦ i++

i = i + k

◦ i += k

a = a + b

◦ a *= b

Toutes les affectations élargies :

+= -= *= /= %= |= ^=

&= <<= >>= >>>=

(28)

Affectation élargie

Attention !

◦ <= ou >= ne sont pas des affectation élargies

<= inférieur ou égtal

>= supérieur ou égtal

(29)

Incrémentation et décrémentation

Attention !

◦ byte b ;

◦ b = b + 3 ; // erreur de compilation

(parce que b+3 est un entier)

◦ b+=3 ; // juste

◦ b = (byte) (b + 3) ; // juste (cast)

Même remarque pour le type char

(30)

L’opérateur de cast

L'opérateur de cast est utilisé pour forcer la conversion d'une expression quelconque

dans un type de son choix

Si n et p sont deux entiers, l'expression

(double) (n/p)

aura comme valeur celle de l'expression entière (n/p) convertit en double

(31)

Les opérateurs de manipulation de bits

Travailler directemetn sur le motif binaire d'une valeur

Opérateur Signification

&

|

^

<<

>>

>>>

~ (uniaire)

Et (bit à bit)

Ou inclusif (bit à bit) Ou exclusif (bit à bit) Décalage à gauche

Décalage arithmétique à droite Décalage logique à droite

Complément

(32)

Les opérateurs de manipulation de bits

Les opérateuirs bit à bit :

◦ Soient les deux opérandes suivants :

o1 = 0 0 0 0 0 0 1 1

o2 = 0 0 0 0 0 1 0 1

o1 & o2 = 0 0 0 0 0 0 0 1

o1 | o2 = 0 0 0 0 0 1 1 1

o1 ^ o2 = 0 0 0 0 0 1 1 0

~o2 = 1 1 1 1 1 0 1 0

(33)

Les opérateurs de manipulation de bits

Les opérateuirs bit à bit :

◦ Soient les deux opérandes suivants :

n1 = 0 0 1 1 1 0 1 1

n1 << 2 1 1 1 0 1 1 0 0

n1 >> 3 0 0 0 0 0 1 1 1

n1 >>> 3 0 0 0 0 0 1 1 1

n2 = 1 1 1 0 1 1 0 0

n2 << 2 1 0 1 1 0 0 0 0

n2 >> 3 1 1 1 1 1 1 0 1

n2 >>> 3 0 0 0 1 1 1 0 1

(34)

L’opérateur conditionnel

if (a > b)

max = a ;

else

max = b;

On peut l'écrire comme suit :

max = (a>b) ? a : b ;

(35)

L’opérateur conditionnel

Exemples :

◦ 3*a+1>0 ? 3*a+1 : -3*a-1

◦ z = ( a>b ? a : b ) ;

◦ a>b ? : i++ ; i-- ;

(36)

Récapitulatif des priorités

Opérateurs Associativité

() [] . ++(postfixé) --(postfixé)

+(uniaire) --(uniaire) ++(préfixé) --(préfixé)

~(unaire) ! cast new

* / %

+ -

<< >> >>>

< <= > >= instanceof

== !=

&

^

|

&&

||

?:

= += -= *= /= %= <<= >>= >>>= &< |= ^=

(37)

Merci de votre attention

Références

Documents relatifs

J'ai raconté un épisode, mais ce qui a été le plus important pour moi c'est d'avoir connu le monde de la coopération, le travail de groupe, qui m'a aidé dans mes rapports avec

- Les conversions implicites peuvent avoir lieu dans le calcul d’une expression quand on passe directement un argument à une fonction ou lors du retour d’une valeur par une

La compostabilité des fumiers équins, à partir de litière de tourbe, de copeaux de bois ou de paille en pellets, a été évaluée par les profils de température des fumiers au cours

Réaliser un programme qui affiche le résultat de l’opération après affectation dans une

SYSTÈMES DE COORDONNÉES ; EXPRESSIONS DES OPÉRATEURS. Les coordonnées cartésiennes. 2°) Expressions des opérateurs en coordonnées cartésiennes. Les coordonnées cylindriques..

We consider conversions of regular expressions into k-realtime finite state automata, i.e., automata in which the number of consecutive uses of ε -transitions, along any

The translation of the Haskell solution shows us exactly what additional argument we need to pass to find (the CT dictionary for the result type), and exactly what

⇒ l’outil existe, mais souvent, il faut mieux ne pas l’utiliser!.. 2) modifier le type d’une variable : Cast Cast = 2 modes de fonctionnement. Conversion sur les types basiques: