5
Ricordiamo o scopriamo la precedenza degli operatori A ciascun operatore è associato un grado di priorità. I calcoli con priorità maggiore sono eseguiti prima degli altri. Nell’incertezza, si possono sempre utilizzare le parentesi tonde così come faremmo nell’aritmetica tradizionale. Operatori aritmetici o algebrici Operatore Uso Significato + a + b somma a e b - a - b sottrae b da a * a * b moltiplica a per b / a / b divide a per b % a % b calcola il resto della divisione intera di a per b (solo con int, long e byte) ++ a++ , ++a incrementa la variabile -- a--, --a decrementa la variabile Ordine di precedenza Priorità maggiore minore minore Ricordiamo: a + b + c/num calcola prima c/num ed in seguito somma i tre addendi (a + b + c ) / num divide la somma per num Operatori di assegnamento in ordine decrescente di precedenza operatore esempio equivale a = x = valore x valore += -= *= /= %= x += y x -= y x *= y x /= y x %= y x = x + y x = x - y x = x * y x = x / y x = x % y Nelle tabelle complete se ne vedono altri con ordine di precedenza inferiore var++ var-- ++var --var * / % + - assegnamento = += -= *= /= %= &= |=

Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

Ricordiamo o scopriamo la precedenza degli operatori

A ciascun operatore è associato un grado di priorità. I calcoli con priorità maggiore sono eseguiti prima degli altri.

Nell’incertezza, si possono sempre utilizzare le parentesi tonde così come faremmo nell’aritmetica tradizionale.

Operatori aritmetici o algebrici

Operatore Uso Significato

+ a + b somma a e b

- a - b sottrae b da a

* a * b moltiplica a per b

/ a / b divide a per b

% a % b calcola il resto della divisione intera di a per b (solo con int, long e byte)

++ a++ , ++a incrementa la variabile

-- a--, --a decrementa la variabile

Ordine di precedenza Priorità maggiore minore

minore Ricordiamo: a + b + c/num calcola prima c/num ed in seguito somma i tre addendi (a + b + c ) / num divide la somma per num Operatori di assegnamento in ordine decrescente di precedenza

operatore esempio equivale a = x = valore x valore += -= *= /= %=

x += y x -= y x *= y x /= y x %= y

x = x + y x = x - y x = x * y x = x / y x = x % y

Nelle tabelle complete se ne vedono altri con ordine di precedenza inferiore

var++ var-- ++var --var

* / %

+ -

assegnamento = += -= *= /= %= &= |=

Page 2: Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

Operatori booleani o logici

Sono detti così in onore di chi li ha introdotti: G. Boole. Sono suddivisi in logici e orientati ai bit. Si considerano, nel corso, solo i primi che agiscono su intere proposizioni

Operatori booleani (o logici) in Java (in ordine decrescente di precedenza)

! && ^ ||

NOT AND XOR OR

Gli operatori && e || possono essere usati per congiungere più condizioni ed implementano la cosiddetta "valutazione a corto circuito", in quanto è garantito che vengano esaminate solo le proposizioni necessarie a stabilire il valore di verità. Sono detti operatori lazy (pigri) o short-cut: valutano il secondo argomento solo se è necessario.

Operatore Uso Significato

&& a() && b() vero se a() vero e b() vero

|| a() || b() vero se a() vero o b() vero o entrambi veri

c && d d viene valutato solo se c vale true

c || d d viene valutato solo se c vale false

a!=0 && b/a > 100 si legge (a!=0) && ((b/a) > 100) se a==0, allora ((b/a) > 100) non viene valutato e la condizione vale false

Qual è il valore di (true ^ true && false || !true) ?

Suggerimento: data la precedenza degli operatori la formula viene letta come

( (true ^ (true && false) ) || (!true) ) NOT precedenza maggiore AND XOR … (or esclusivo) si può ricordare più facilmente come l'operatore di confronto diverso da Or precedenza minore

http://www.di.unipi.it/~andrea/Didattica/LIP-07/Tipi-Input/TipoBoolean/main.html

Segmento di programma:

System.out.println("\n" + (true ^ true && false || !true) );

System.out.println("\n" + (true&& false || !true) );

System.out.println("\n" + (true ^ true && false) );

L'operatore xor (or esclusivo) si ricorda più facilmente come l'operatore di confronto diverso da

Page 3: Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

Operatori relazionali o di confronto

Sono detti 'relazionali' perché non hanno per risultato un numero, ma confrontano i due operandi e restituiscono un valore di verità. Il risultato di queste operazioni è sempre un valore boolean, ovvero true o false.

Gli operatori relazionali e di confronto in Java, in ordine decrescente di precedenza sono i seguenti:

< > <= >= == !=

Operatore Uso Significato Tipo

operandi

== a == b vero se a è uguale a b tutti i tipi

!= a != b vero se a è diverso da b tutti i tipi

> a > b vero se a è maggiore di b numerici

< a < b vero se a è minore di b numerici

>= a >= b vero se a è maggiore o uguale a b numerici

<= a <= b vero se a è minore o uguale a b numerici

Errori sintattici: if ( 0 < numero < 1000) if ( 0 < numero) && (numero < 1000)

… occorre scrivere: if ( 0 < numero && numero < 1000)

oppure con più attenzione alle singole condizioni: if ( ( 0 < numero) && (numero < 1000) )

http://www.dis.uniroma1.it/~oop/drupal/sites/default/files/02%3A3_operatori-2015.pdf (già ppt 2003-04)

Segmenti di programma equivalenti

if ((media>6) && (media<=7)) { …… }

if ( 6 < media && media <=7 ){ …… }

boolean altro = false; // oppure true potendo assegnare il minimo o il massimo della banda …… // decidere if ((media>6) && (media<=7)) { if (altro) credito = 5; else credito = 4; }

nb: Un'espressione booleana esprime già, per sua natura, un valore di verità: non c'è bisogno di confrontarla

con true per stabilire se è vera e con false per stabilire se è falsa.

Page 4: Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

Tabella delle precedenze degli operatori di Java

La tabella mostra le precedenze assegnate agli operatori Java di maggior uso. Gli operatori sono elencati in ordine di precedenza: più in alto un operatore appare nella tabella, più alta è la sua precedenza. In un espressione vengono valutati prima gli operatori con precedenza relativa più alta. Gli operatori sulla stessa riga hanno la stessa precedenza.

operatori postfissi [] . (params) expr++ expr--

operatori unari ++expr --expr +expr -expr !

instanze e cast new (type)expr

aritmetici * / %

aritmetici + -

di relazione < > <= >=

uguaglianza == !=

AND &&

OR ||

condizionale ? :

assegnamento = += -= *= /= %= &= |=

Quando nella stessa espressione appaiono operatori con la stessa precedenza occorre stabilire quale viene valutato prima. Gli operatori binari sono valutati da sinistra a destra, mentre gli assegnamenti sono valutati da destra a sinistra.

http://homes.di.unimi.it/~alberti/Prog09/Lucidi/precedenze.html

Page 5: Ricordiamo o scopriamo la precedenza degli operatorinew345.altervista.org/Dispense/Operatori_precedenze.pdf · Tabella delle precedenze degli operatori di Java La tabella mostra le

- Regole di precedenza tra gli operatori di Java

Nella seguente tabella sono riportati, in ordine di priorità, tutti gli operatori di Java. Gli operatori riportati nelle righe più alte hanno priorità maggiore rispetto quelli presentati più in basso. All'interno di ciascuna riga, la priorità è maggiore verso sinistra e minore verso destra.

Priorità maggiore minore minore

Tabella 5.14: schematizza l'ordine di precedenza degli operatori di Java.

pg.21 http://www.sauronsoftware.it/corsojava/Lezione_05.pdf