Tipi base Tipi interi Operatori numerici Tipi float
Tipi base Tipi interi Operatori numerici Tipi float Caratteri Tipo booleano 13/08/02 Tipi base 1
Tipo intero La parola chiave int definisce una variabile di tipo intero Un int permette di memorizzare un intero di 4 byte (32 bit) con la tecnica del complemento a 2 Costanti di tipo intero sono sequenze di caratteri numerici senza il punto decimale Se la prima cifra è 0 il numero è interpretato come scritto secondo la notazione ottale Se la prima cifra è 0 seguito da x (X) il numero è considerato esadecimale 127 può perciò anche essere scritto sia come 0177 che 0 x 7 f 13/08/02 Tipi base 2
Tipo intero: operatori Espressioni di tipo intero utilizzano: operatori unari +, operatori di tipo aritmetico +, -, *, /, % (resto della divisione) 28 / 5 --> 5 28 % 5 --> 3 13/08/02 Tipi base 3
Programma Porta. Monete. java 1. public class Porta. Monete { 2. public static void main(String[] args) { 1. // il portamonete contiene 3. int un. Cent = 8; // 8 monete da 1 cent, 1. int dieci. Cent = 4; // quattro da 10 cent, 4. int venti. Cent = 3; // e tre da 20 5. 6. // calcola il valore totale della moneta 7. int totale = un. Cent*1 + dieci. Cent*10 + venti. Cent*20; 8. 9. // stampa il risultato 10. System. out. print(“Valore totale = ”); 11. System. out. print(totale); Ho definito 4 12. System. out. println(“ centesimi”); variabili di 13. } tipo int 14. } Valore totale = 108 centesimi 13/08/02 Tipi base 4
Programma Porta. Monete. java E: Javaesempi> java Porta. Monete Valore totale = 108 centesimi E: Javaesempi> 13/08/02 Tipi base 5
Programma Monete 2. java 1. public class Monete 2 { 2. public static void main(String[] args) { 3. int un. Cent = 8; // 8 monete da 1 cent, 4. int dieci. Cent = 4; // 4 da 10 cent, 5. 6. int totale = un. Cent * 1 + dieci. Cent * 10; 7. 8. int venti. Cent = 3; // e 3 da 20 cent 9. 10. // somma il valore dei venti cent 11. totale = totale + venti. Cent * 20; 12. 13. // stampa il risultato 14. System. out. print(“Valore totale = ”); 15. System. out. print(totale); 16. System. out. println(“ centesimi”); 17. } 18. } Valore totale = 108 centesimi 13/08/02 Tipi base 6
Assegnazione 11. totale = totale + venti. Cent * 20; venti. Cent totale 3 venti. Cent 48 totale 3 48 totale + venti. Cent * 20 108 Il nuovo valore ha sostituito irreversibilmente quello vecchio 13/08/02 Tipi base 7
Il concetto di memoria Variabili Ogni variabile ha un nome, un tipo, una dimensione e un valore Il nome corrisponde a un indirizzo di memoria Quando un nuovo valore è posto in una variabile, sostituisce (e quindi distrugge) il contenuto precedente Leggere variabili dalla memoria non altera il loro valore Nome: “totale” Tipo: int Dimensione: 4 byte totale 108 venti. Cent 3 108 è il valore memorizzato nella cella 13/08/02 Tipi base 8
Tipo intero: operatori bit a bit & (and) 0 xe & 0 x 3 0 x 2 | (or) 0 xe | 0 x 3 0 xf ^ (exor) 0 xe ^ 0 x 3 0 xd ~ (not) (scambia gli 1 con gli 0) >>, <<, >>> (shift) 0 xe << 4 0 xe 0 0 xe >> 2 0 x 3 (implementano in modo efficiente moltiplicazioni e divisioni per potenze di 2) >> conserva il bit di segno >>> inserisce sempre uno zero come bit più significativo 13/08/02 Tipi base 9
Test Operatori 1. public class Test. Operatori { 2. 3. public static void main(String[] args) { 4. System. out. println(0 xe & 0 x 3); 5. System. out. println(0 xe | 0 x 3); 6. System. out. println(0 xe ^ 0 x 3); 7. System. out. println(~ -2 ); 8. System. out. println(-1 << 2); 9. System. out. println(-4 >> 2); 10. System. out. println(-4 >>> 2); 11. System. out. println(-1 >> 1); 12. System. out. println(-1 >>> 1); 13. } 14. 15. } 13/08/02 Tipi base 2 15 13 1 -4 -1 1073741823 -1 2147483647 10
Operatori di incremento ++, -- incrementano o decrementano di 1 l'operando se l'operatore precede l'operando il risultato dell'espressione è quello ottenuto dopo l'applicazione dell'operatore stesso esempio: a = 4; b = ++a; // sia ad a che a b è assegnato il valore 5 a = 4; b = a++; // ad a è assegnato ancora 5, mentre a b il valore 4 a = 4; b = --a; // (a memorizza 3, b 3) a = 4; b = a--; // (a memorizza 3, b 4) ++ e -- sono applicabili solo a variabili non espressioni es. ++4 non è corretto 13/08/02 Tipi base 11
Operatori: priorità Esiste una priorità fra gli operatori che corrisponde in genere alle normali regole dell’algebra: prima moltiplicazioni e divisioni (e modulo), poi somme e sottrazioni A parità di priorità le operazioni vengono solitamente eseguite da sinistra a destra, esiste comunque la possibilità di utilizzare le parentesi tonde per forzare un ordine particolare nell’ordine di esecuzione In caso di dubbi usate sempre le parentesi, in genere i programmi diventano anche più leggibili In generale la leggibilità aumenta spezzando espressioni complesse in più istruzioni semplici 13/08/02 Tipi base 12
Altri tipi interi byte intero di 8 bit short intero di 16 bit long intero di 64 bit costanti di tipo long hanno come ultimo carattere L (l) 13/08/02 Tipo Memoria Valore minimo Valore Massimo byte 8 bit -128 127 short 16 bit -32768 32767 int 32 bit -2147483648 2147483647 long 64 bit minore di 1018 maggiore di 1018 Tipi base 13
Programma Monete 3. java 1. public class Monete 3 { 2. public static void main(String[] args) { 3. final int VAL_CENT = 1; 4. final int VAL_10 CENT = 10; 5. final int VAL_20 CENT = 20; 6. final int VAL_EURO = 100; 7. 8. int un. Cent = 8; 9. int dieci. Cent = 4; 10. int venti. Cent = 7; 11. 12. // calcola il valore totale della moneta 13. int totale = 14. un. Cent * VAL_CENT + 15. dieci. Cent * VAL_ 10 CENT + 16. venti. Cent * VAL_20 CENT; 17. 13/08/02 Tipi base 14
Programma Monete 3. java 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. } // usa la divisione fra integer per convertire // i centesimi in dollari int euro = totale / VAL_EURO; int cent = totale % VAL_EURO; System. out. print("Valore totale = "); System. out. print(euro); System. out. print(" euro e "); System. out. print(cent); System. out. println(" centesimi"); } Valore totale = 1 euro e 88 centesimi 13/08/02 Tipi base 15
Tipi floating point float precisione semplice (4 byte), double precisione doppia (8 byte) Costanti double 133. 3 78 e-5 sono caratterizzate o dal punto decimale o dall'esponente float 133. 3 f 78 e-5 F sono caratterizzate dal suffisso f(F) Tipo 13/08/02 Memoria Esponente double 64 bit 10 bit maggiore di 10308 float 32 bit 8 bit maggiore di 1038 Tipi base Valore Massimo 16
Tipi floating point : operatori Sono gli stessi operatori visti per i tipi interi Non sono definiti gli operatori relativi alla gestione dei bit La divisione ovviamente produce decimali 28. 0 / 5. 0 --> 5. 6 Esiste l’operatore % definito come a%b = a – ( (int)(a/b) ) * b 28. 0 / 5. 1 --> 2. 5 13/08/02 Tipi base 17
Funzioni matematiche La classe Math mette a disposizione una serie di metodi statici che implementano le più note funzioni matematiche Attenzione ogni volta che si utilizza uno di questi metodi occorre sempre specificare anche il nome della classe Esempio: Math. sin(Math. to. Radians(45)) 13/08/02 Tipi base 18
Funzioni matematiche Il tipo restituito dipende dagli argomenti abs(x) Restituisce il valore assoluto max(a, b) Restituisce il maggiore dei due valori min(a, b) Restituisce il minore dei due valori Il tipo restituito è un double (escluso round che restituisce un long) ceil(x) Restituisce l’intero più piccolo maggiore o uguale all'argomento floor(x) Restituisce l’intero più grande minore o uguale all'argomento rint(x) Restituisce l’intero più vicino a x round(x) Restituisce l’intero più vicino a x sqrt(x) Restituisce la radice quadrata pow(a, b) Operazione di elevamento a potenza ab exp(x) Funzione esponenziale ((Math. E)x ) log(x) Restituisce il logaritmo naturale (in base e) random() escluso 13/08/02 Restituisce un numero "a caso" compreso fra 0. 0 e 1. 0 Tipi base 19
Funzioni trigonometriche sin(x) Restituisce il seno dell'angolo cos(x) Restituisce il coseno dell'angolo tan(x) Restituisce la tangente dell'angolo acos(x) Funzione inversa di cos asin(x) Funzione inversa di sin atan(x) Funzione inversa di tan atan 2(y, x) Restituisce la componente q del punto (r, q) in coordinate polari che corrisponde a (x, y) in coordinate Cartesiane per x positivo atan 2(y, x)==atan(y/x) Per riferirsi a p si può utilizzare la costante Math. PI 13/08/02 Tipi base 20
Funzioni trigonometriche Versioni recenti di Java hanno implementati anche i metodi: to. Degrees(angrad) Converte da radianti a gradi to. Radians(angdeg) Converte da gradi a radianti In alternativa si può ottenere lo stesso risultato con il codice: degrees = angrad / Math. PI * 180. 0 angrad = degrees / 180. 0 * Math. PI 13/08/02 Tipi base 21
Funzioni. Trigonometriche. java 1. public class Funzioni. Trigonometriche { 2. public static void main(String[] args) { 3. int ang=45; 4. double seno=Math. sin(Math. to. Radians(ang)); 5. double pi = Math. asin(seno)*4; 6. System. out. print("sen(45°)="); 7. System. out. println(seno); 8. System. out. print("pi greco="); 9. System. out. println(pi); 10. System. out. print("Math. PI= "); 11. System. out. println(Math. PI); 12. } 13. } E: JavaesempiMath> java Funzioni. Trigonometriche sen(45°)=0. 7071067811865475 pi greco=3. 1415926535897927 Math. PI= 3. 141592653589793 E: JavaesempiMath> 13/08/02 Tipi base 22
Tipo boolean Espressioni boolean possono assumere solo due valori corrispondenti alle costanti predefinite true (vero) e false (falso), variabili booleane assumono per default il valore false Operatori booleani &, |, ^, !, &&, || And & false true false true Or | false true Not ! false true true false Xor ^ false true true false && e || si comportano come i corrispondenti & e |, terminando la valutazione dell’espressione non appena questa è definita 13/08/02 Tipi base 23
Tipo boolean Operatori relazionali (permettono di confrontare fra di loro due valori): == uguale != diverso > maggiore + è l’operatore di concatenazione fra stringhe, < minore se un operando non è una >= maggiore o uguale stringa, viene <= minore o uguale automaticamente convertito in maniera opportuna 1. public class Confronti { 2. 3. 4. 5. 6. 7. 8. 9. } 13/08/02 public static void main(String[] args) { int a=0, c=5; boolean b=(c>3) || (a++>0); System. out. println("(c>3) || (a++>0): "+b+" a="+a); b=(c>3) | (a++>0); System. out. println("(c>3) | (a++>0): "+b+" a="+a); } (c>3) || (a++>0): true a=0 (c>3) | (a++>0): true a=1 Tipi base 24
Concatenazione di stringhe (cenni) 1. public class Concatenazione { 2. 3. public static void main(String[] args) { 4. int a=1, b=2; 5. System. out. println("a+b="+a+b); 6. } 7. } 6. a+b=12 System. out. println("a+b="+a+b); L’operatore + viene valutato da sinistra verso destra perciò “a+b”+a concatena la stringa “a+b=” con la stringa “ 1”, il risultato di questa operazione viene quindi concatenato alla stringa “ 2” Probabilmente si voleva scrivere: 6. 13/08/02 System. out. println("a+b="+(a+b)); Tipi base a+b=3 25
Operatore ? L’operatore ? È l’unico operatore che coinvolge 3 valori Sintassi: <espressione booleana> “? ” <espressione 1> “: ” <espressione 2> Viene valutata l’espressione booleana, se risulta vera il valore finale è il risultato della prima espressione, altrimenti della seconda min = a<b ? a : b; // assegna a min il valore più piccolo fra a e b 1. public class Operatore. Ternario { 2. 3. public static void main(String[] args) { 4. int età = 23; 5. System. out. println( 6. "Mario è "+(età>=18 ? "maggiorenne" : "minorenne")); 7. } 8. } Java accetta anche lettere accentate negli identificatori, non è comunque Mario è maggiorenne una pratica consigliabile 13/08/02 Tipi base 26
Tipo char Il tipo char permette di memorizzare e stampare lettere, cifre, caratteri di punteggiatura, operatori, caratteri speciali Una costante di tipo char viene rappresentata dal carattere (o dalla corrispondente sequenza di escape) tra apici singoli char c = ‘a’; // ho memorizzato in c il codice del carattere a char d = ‘n’; // ho memorizzato in d il codice del “new line” Un char viene memorizzato con 16 bit (2 byte) in questo modo è possibile trattare cifre e caratteri di alfabeti diversi (cirillico, ebraico, arabo, … ) Viene garantito il normale ordinamento alfabetico: ‘a’<‘b’, ma ‘B’<‘a’ (le lettere maiuscole precedono le minuscole), sono quindi lecite anche le operazioni di incremento e decremento 13/08/02 Tipi base 27
Caratteri unicode I caratteri estesi (unicode) sono rappresentati dalla sequenza u. XXXX (X cifra esadecimale) char digit = ‘u 0 f 23’; // è la cifra 3 secondo l’alfabeto tibetano 1. public class Caratteri. Unicode { 2. 3. public static void main(String[] args) { 4. char digit = 'u 0 f 23'; 5. int val = Integer. parse. Int(""+digit); 6. System. out. println(digit+"="+val); 7. } 8. } digit è riconosciuto come una cifra, quindi la stringa risultante è trattata come una stringa numerica 13/08/02 Tipi base ? =3 Il sistema non sa come trattare il carattere 28
Caratteri unicode Menù con caratteri cinesi L’alfabeto Thai 13/08/02 Tipi base 29
Caratteri unicode I codici minori di 0 x 7 F corrispondono ai codici ASCII ‘u 0033’ il codice della cifra ‘ 3’ 1. public class Caratteri. Unicode { 2. 3. public static void main(String[] args) { 4. char digit = 'u 0033'; 5. int val = Integer. parse. Int(""+digit); 6. System. out. println(digit+"="+val); 7. } 8. } 3=3 In linea di principio qualunque carattere unicode riconosciuto come lettera o cifra potrebbe essere utilizzato in un identificatore (ammesso di avere un editor adatto) 13/08/02 Tipi base 30
Operatore di assegnazione Anche l'operatore = è un operatore lecito all'interno di una espressione restituisce come valore il risultato dell'espressione alla sua destra, gli operatori di assegnazione sono eseguiti da destra a sinistra (la maggior parte degli operatori viene associata da sinistra a destra) a=b=0; // assegna 0 sia a b che ad a 1. public class Assign { 2. 3. public static void main(String[] args) { 4. int a, b; 5. a = b = 4 * 5 / 3; 6. System. out. println("a="+a+" b="+b); 7. } 8. } 1. public class Assign { 2. 3. public static void main(String[] args) { 4. int a, b; 5. a = (b = 4 * 5) / 3; 6. System. out. println("a="+a+" b="+b); 7. } 8. } 13/08/02 Tipi base a=6 a=? b=6 b=? a=6 a=? b=20 b=? 31
Operatore di assegnazione Esistono altri operatori di assegnazione: +=, -=, *=, /=, %=, <<=, >>>=, &=, |=, ^= il risultato dell'espressione (var op= espr) sarà in generale equivalente all'espressione (var = var op espr) Esempio x += 3 (x = x + 3) NB: Si ricorda che l'assegnazione non è una equazione x = 2 * x - 3 non dà come risultato x = 3, ma il risultato dipenderà dal valore che x assumeva prima del calcolo dell'espressione alla destra di = (esempio se x valeva 2 il nuovo valore di x è 1) 13/08/02 Tipi base 32
Regole di conversione Risultato di un’espressione Tipo di dato degli operandi double Almeno un operando e’ double. float Almeno un operando e’ float; nessun operando e’ double. long Non ci sono operandi float o double; almeno un operando e’ long. int Non ci sono operandi float o double; nessun operando e’ long. 13/08/02 Tipi base 33
Operatori: precedenza e associatività Operatore Associatività ( ) ++ (postfisso) -- (postfisso) da sinistra a destra + (unario) – (unario) ++ (prefisso) -- (prefisso) da destra a sinistra new (tipo)espressione da destra a sinistra * / % da sinistra a destra + - da sinistra a destra = += -= *= /= da destra a sinistra 13/08/02 Tipi base 34
Operatori: priorità postfix operators []. (params) expr++ expr-- unary operators ++expr --expr +expr -expr ~ ! creation or cast new (type)expr multiplicative * / % additive + - shift << >> >>> Relational < > <= >= instanceof equality == != bitwise AND & bitwise inclusive OR ^ bitwise exclusive OR | logical AND && logical OR || Conditional ? : Assignment = += -= *= /= %= &= ^= |= <<= >>= Quando operatori con la medesima priorita’ sono presenti in un’espressione si deve seguire una regola che stabilisca l’ordine di valutazione. Tutti gli operatori, ad esclusione degli operatori di assegnazione, vengono valutati da sinistra verso destra. Gli operatori di assegnamento vengono valutati da destra a sinistra. 13/08/02 Tipi base 35
- Slides: 35