Linguaggio C Espressioni e operatori



Documenti analoghi
2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2)

Linguaggio C Strutture di controllo

Codifica dei numeri interi positivi e negativi

Input/output in C e in C++

Dal linguaggio macchina al linguaggio C

Linguaggio C I puntatori

Linguaggio C Debugging

Linguaggio C Struct e union

Programma sorgente, compilatore, file oggetto, file eseguibile. Traduzione effettuata dal compilatore. Dichiarazione di variabili (esempi)

Linguaggio C Vettori e stringhe

Controllo e correzione degli errori

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Codifiche Binary Coded Decimal (BCD) e Gray

Linguaggio C e sistema operativo

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio

Introduzione al corso

Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione

Introduzione alla programmazione strutturata

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Codifica del video

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Architettura e funzionamento del calcolatore

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Corso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato

Architettura del processore. Modello di calcolatore. Caratteristiche del processore. Caratteristiche del processore. Fondamenti di Informatica

La programmazione in linguaggio C

Codifica dei segnali audio

Linguaggio C Struttura dei programmi

2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2) Fondamenti di Informatica.

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Autenticazione, firme digitali e certificati digitali

RETI DI CALCOLATORI II

Elementi di crittografia

Linguaggio C: Espressioni

Le trappole del linguaggio C

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Espressioni in Linguaggio C

Tecniche di compressione senza perdita

Nota di Copyright RETI DI CALCOLATORI. Lezione 28: indice degli argomenti. Lezione 28. Il collegamento agli Internet Service Provider

Fondamenti di programmazione parte 2. Elementi di informatica IGLP

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Linguaggio C: Espressioni

IL LINGUAGGIO C TIPI DI DATO

Memoria cache, interrupt e DMA

Elementi di crittografia

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

Linguaggio C: Espressioni

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione JPEG

RETI DI CALCOLATORI II

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Codifica dei testi

Espressioni ed operatori in C

Espressioni ed operatori in C

Argomenti della lezione

RETI DI CALCOLATORI II

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Gestione della memoria per sistemi multiprogrammati. Obiettivi. Partizioni fisse. Partizioni fisse. Fondamenti di Informatica

Gestione della memoria di massa e file system

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Memoria cache. Memoria cache. Miss e Hit. Problemi. Fondamenti di Informatica

LINGUAGGI DI PROGRAMMAZIONE!

Corso di PHP. Prerequisiti. 2.2 Operatori. Conoscenza HTML Tecnica della programmazione Principi di programmazione web. M. Malatesta 2.

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6

Il cablaggio strutturato degli edifici: cosa c e` ` di nuovo?

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

LINGUAGGI DI PROGRAMMAZIONE

Corso sul linguaggio Java

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

1999 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Parte seconda: espressioni, operandi e operatori.

1 Operatori bit-a-bit (Rev )

Nota di Copyright RETI DI CALCOLATORI. Lezione 2: indice degli argomenti. Lezione 2. I servizi offerti dalle reti di calcolatori

La voce di Elvis Presley, la chitarra di David Gilmour e le funzioni di callback in linguaggio C

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

Nota di Copyright RETI DI CALCOLATORI. Lezione 8: indice degli argomenti. Lezione 8. Fibre ottiche. Struttura di una fibra ottica

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Reti logiche

1

Introduzione alla programmazione in C

IL LINGUAGGIO C TIPI DI DATO

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

Sicurezza applicata in rete

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Trasmissione bilanciata e amplificatore differenziale

Primo: eliminare la confusione

Transcript:

FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing.DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Espressioni e operatori 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

Nota di Copyright Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine. Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione. Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori. L informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell informazione). In ogni caso non può essere dichiarata conformità all informazione contenuta in queste slide. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2

Operatori ed espressioni I programmi hanno lo scopo di eseguire operazioni sui dati Il linguaggio C offre una serie di operatori: aritmetici relazionali logici di assegnazione di incremento e decremento bit a bit ( bitwise ) Gli operatori che richiedono due operandi si dicono binari; alcuni operatori, detti unari, agiscono invece su un unico operando 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

Espressioni Un espressione è una combinazione di operatori e relativi operandi Nella forma più semplice, un espressione è priva di operatori; in tal caso corrisponde a: 3.14 una costante x il valore di una variabile calcola_valore(x, y) una funzione definita dall utente sin(x) una funzione di libreria 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Espressioni Nella sua forma più complessa, un espressione può comprendere uno o più operatori e relativi operandi (2+i) * (2-i) Se nell espressione compaiono più operatori, questi sono soggetti a delle precise regole di precedenza L espressione aritmetica precedente corrisponde ad esempio al prodotto tra le due espressioni (2+i) e (2-i), mentre: 2+i*2-i corrisponde a (2+(i*2)) - i 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Operatori aritmetici Gli operatori aritmetici disponibili in C sono: + somma - sottrazione * moltiplicazione / divisione % modulo (resto della divisione intera) L operatore di divisione applicato a due interi restituisce la parte intera del quoziente (es. 5/2 2) L operatore % fornisce il resto della divisione tra due operandi interi: 5%2 1 Nel caso di operandi reali: 5.0/2.0 2.5 (se un operando è reale e l altro intero, quello intero viene promosso a reale) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Operatori aritmetici Sono possibili più operazioni in sequenza In tale caso: *, / e % hanno la precedenza su + e - l associatività vale da sinistra verso destra Quindi 6 + 3 * 4 / 3 + 2 corrisponde a... (6 + ((3*4)/3)) + 2 12 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Operatore cast In qualsiasi espressione è possibile forzare delle conversioni di tipo, mediante l operazione unaria di cast Nel costrutto generico (nome_del_tipo) espressione l espressione viene convertita nel tipo specificato, secondo precise regole di corrispondenza tra i tipi Ad esempio, se j è un intero, l espressione (4 /(float) j) converte al volo il valore della variabile j in reale e quindi forza l esecuzione della divisione tra numeri reali Il linguaggio applica delle regole di conversione automatica; è tuttavia consigliabile indicare esplicitamente tutte le conversioni di cui non si è certi! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

Operatori aritmetici unari Gli operatori aritmetici + e - possono essere utilizzati anche come operatori unari: -i +i a + (-x) -(2*y) + x 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Operatori relazionali Permettono il confronto di coppie di valori tra loro omogenei (dello stesso tipo) Generano un risultato logico (vero o falso) Sono spesso usati come condizioni di controllo dell esecuzione di un programma Essi sono: > maggiore >= maggiore o uguale < minore <= minore o uguale == uguale!= diverso 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Vero e falso In C un espressione è: VERA se assume un valore diverso da zero FALSA se assume il valore zero 0 = falso 0 = vero NOTA: normalmente non è necessario che il programma utilizzi esplicitamente questi valori, in quanto si utilizzano le espressioni relazionali 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

Esempi di espressioni relazionali Il risultato di un espressione relazionale è un valore logico vero o falso Se i = 5 e j = 7, allora: i > j è falsa i < j è vera i >= j è falsa i <= j è vera i == j è falsa i!= j è vera 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

Esempi di espressioni relazionali Gli operatori relazionali hanno precedenza inferiore rispetto agli operatori aritmetici, e associatività da sinistra verso destra var_1 == var_2 + 1 corrisponde all espressione var_1==(var_2 + 1) a + b!= i corrisponde a (a+b)!= i 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Operatori logici A questa categoria appartengono gli operatori booleani: && AND logico OR logico! NOT logico (unario) Gli operatori && e hanno precedenza inferiore agli operatori aritmetici e agli operatori relazionali; l associatività vale da sinistra a destra L operatore && ha precedenza maggiore rispetto a L operatore! ha precedenza maggiore rispetto agli operatori aritmetici, relazionali, all AND e all OR logici; per esso l associatività vale da destra a sinistra 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

Operatori logici: AND A B U U = A && B F F F F V F V F F V V V 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

Operatori logici: AND A && B è falsa se almeno un operando è falso A && B è vera se tutti gli operandi sono veri 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Operatori logici: OR A B U U = A B F F F F V V V F V V V V 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17

Operatori logici: OR A B è falsa se tutti gli operandi sono falsi A B è vera se almeno un operando è vero 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

Operatori logici: NOT U =!A A F V U V F 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19

Operatori logici L operatore! di negazione logica restituisce: un valore diverso da zero, quando l operando vale 0 (nel caso di un intero) oppure 0.0 (nel caso di un floating-point) zero, se l operando ha valore diverso da zero È frequente trovare l operatore! in espressioni condizionali del tipo: if (!espressione) istruzioni nel qual caso il blocco di istruzioni verrà eseguito solo l espressione è falsa 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20

Operatori di assegnazione La sintassi dell operatore di assegnazione è: nome_variabile = espressione Alla variabile a sinistra dell operatore '=' viene assegnato il risultato o il valore dell espressione a destra Esempi: z = 2 * y - 1; assegno a z il valore 2*y - 1... x = z - 3; e poi assegno a x il valore z - 3 Un assegnazione è di per sé un espressione con un proprio risultato, e quindi le istruzioni precedenti equivalgono a scrivere: x = (z = 2*y -1) - 3; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21

Operatori di assegnazione Un caso particolare è l assegnazione multipla, che permette di assegnare lo stesso valore a più variabili contemporaneamente: var_1 = var_2 = = var_n = espressione; Ad esempio, l istruzione: i = j = k * 2-1; equivale a scrivere: j = k * 2-1; i = j; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22

Operatori compatti di assegnazione La forma sintattica compatta: nome_var operatore= espressione equivale a scrivere: nome_var = nome_var operatore espressione dove operatore è uno dei seguenti: + - / * % << >> & ^ Ad esempio: x *= y + 1; y += 5; x = x * (y + 1); y = y + 5; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 23

Operatori di assegnazione Gli operatori di assegnazione hanno priorità inferiore a tutti gli operatori del C, eccetto l operatore virgola L associatività vale inoltre da destra verso sinistra, contrariamente agli operatori aritmetici e logici Esempi: y = x /= z +=!j - 5; equivale a... y = (x /= (z += ((!j) - 5))); oppure a: z = z + ((!j) - 5); x = x / z; y = x; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 24

Operatori di incremento e decremento In C esistono due operatori unari speciali : ++ incremento di uno ( autoincrement ) -- decremento di uno ( autodecrement ) Essi permettono di incrementare o decrementare di un unità la variabile cui sono applicati Si possono applicare in due modalità: prefissa (es. ++i): la variabile viene modificata prima di utilizzarne il valore postfissa (es. k--): la variabile viene modificata dopo averne utilizzato il valore 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 25

Operatori di incremento e decremento Il vantaggio di impiegare gli operatori ++ e -- risiede nel fatto di ridurre il numero di espressioni nel codice Ad esempio, l istruzione: j = 2 * (++i); corrisponde a i = i + 1; j = 2 * i; mentre: j = 2 * (i++); equivale a... j = 2 * i; i = i + 1; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 26

Operatori di incremento e decremento ATTENZIONE: i = i++; è indefinita!!! j = 3/i - 2*(--i); è indefinita!!! Infatti, il linguaggio non specifica quando viene effettuato l autoincremento o l autodecremento rispetto alla valutazione degli altri elementi dell istruzione. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 27

Operatori bit a bit (o bitwise) Il linguaggio C definisce sei operatori che manipolano i bit Gli operatori logici sui bit sono: ~ operatore (unario) di complemento & operatore AND ^ operatore OR esclusivo operatore OR Esistono anche due operatori di traslazione sui bit: << traslazione (shift) a sinistra >> traslazione (shift) a destra 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 28

Operatori logici: EXOR (or esclusivo) A B U U = A ^ B 0 0 0 0 1 1 1 0 1 1 1 0 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 29

Operatori logici: EXOR A ^ B vale 0 se gli operandi sono entrambi 0 oppure entrambi 1 A ^ B vale 1 se gli operandi hanno valori logici differenti 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 30

Operatori bit a bit Poiché il modo in cui viene gestito il bit di segno dipende dal compilatore, è meglio applicare tali operatori a variabili di tipo unsigned L operatore ~ effettua il complemento a uno dell operando. Se x è rappresentato da: 1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 allora ~ x sarà rappresentato da... 0 1 0 0 1 1 0 1 0 1 1 0 0 0 1 1 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 31

Operatori bit a bit L operatore & confronta due operandi effettuandone l AND logico bit a bit. Se x è rappresentato da 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 mentre y è rappresentato da: 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 allora il risultato dell espressione x & y sarà... 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 32

Operatori bit a bit L operatore ^ effettua l OR esclusivo (XOR) bit a bit tra due operandi Se la variabile x è rappresentata da: 1 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 mentre la variabile y è data da: 0 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 il risultato di x ^ y sarà... 1 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 33

Operatori bit a bit L operatore effettua l OR bit a bit Se la variabile x è rappresentata da: 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 mentre y è data da: 1 1 1 0 1 1 1 1 0 0 0 0 1 0 0 1 allora il risultato di x y sarà... 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 34

Operatori bit a bit Gli operatori di traslazione (o di shift) << e >> spostano il loro operando sinistro di un numero di bit pari al valore dell operando destro Ad esempio x << 4; sposta a sinistra di quattro posizioni il valore di x, e riempie di zeri i bit così liberati In termini di numeri binari, se x è dato da: 0 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 allora il risultato di x << 4 sarà... 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 35

Operatori bit a bit In modo analogo, lo shift a destra viene effettuato dall operatore >> In tale caso, però, il riempimento dei bit liberati dipende dal tipo dell operando: se l operando è unsigned, i bit liberati sono posti a 0 se l operando è signed, su alcuni sistemi i bit liberati vengono posti uguali al bit di segno, su altri messi a 0 Ad esempio, se x è di tipo unsigned char (8 bit) e vale B8 h : 1 0 1 1 1 0 0 0 allora il risultato di x >> 3 sarà... 0 0 0 1 0 1 1 1 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 36

Espressioni condizionali Le espressioni condizionali fanno uso dell operatore ternario?: La sintassi di un espressione condizionale è: espressione_1? espressione_2 : espressione_3 Dapprima viene valutata l espressione_1; se essa risulta vera (ossia ha valore non nullo), allora viene valutata l espressione_2, il cui valore diventa il risultato dell espressione condizionale In caso contrario, viene valutata l espressione_3, il cui valore diventa il risultato dell intero costrutto 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 37

Espressioni condizionali Ad esempio, le istruzioni if (a > b) else z = a; z = b; possono essere tradotte nel costrutto z = (a > b)? a : b ; Si noti che, se n è un int ed f un float, l espressione: (n > 0)? f : n restituisce un valore float, indipendentemente dal fatto che n sia positivo o meno (promozione di tipo) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 38

Precedenza degli operatori La seguente tabella riassume le regole di precedenza e associatività di tutti gli operatori del linguaggio C Gli operatori sulla stessa linea hanno la stessa precedenza Le righe sono in ordine di precedenza decrescente Si osserva che gli operatori unari + e - hanno precedenza maggiore delle rispettive forme binarie Nella seconda riga compaiono anche l operatore di deriferimento *, quello di indirizzo & e quello di membro di una struttura (l operatore punto. ) Questi non vanno confusi con gli omonimi operatori logici o aritmetici! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 39

Precedenza degli operatori operatori () [] ->.! - + ++ -- * & (tipo) sizeof * / % + - << >> < <= > >= ==!= & ^ &&?: = += -= /= *= %= &= ^= = <<= >>=, (virgola) associatività da sinistra a destra da destra a sinistra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da sinistra a destra da destra a sinistra da destra a sinistra da sinistra a destra 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 40