Tipi primitivi: range di rappresentazione
DOMANDA:
Quali sono i range di valori rappresentabili dai tipi di dati primitivi Java?
RISPOSTA:
Benché non siano facilissimi da ricordare, è importante sapere i limiti di rappresentazione dei diversi tipi per prevenire o evitare di trovarsi a fronteggiare errori di calcolo difficilmente individuabili.
Ecco una tabella riepilogativa dei diversi range:
- BYTE (8 bit): da -128 a 127
- SHORT (16 bit): da -32.768 a 32.767
- INT (32 bit): da -2.147.483.648 a 2.147.483.647
- LONG (64 bit): da -9.223.372.036.854.774.808 a 9.223.372.036.854.774.807
- FLOAT (32 bit): da 1,4e-045 a 3,4e+038
- DOUBLE (64 bit): da 4,9e-324 a 1,8e+308
- CHAR (16 bit) - Unicode: da 0 a 65.536
- BOOLEAN (1 bit): true o false
Ed ecco cosa succede a sbagliare il tipo di dato in un calcolo:
public class RangeTest {
public static void main(String[] args) {
short s1 = 100;
short s2 = 29;
short somma1 = (short) (s1 + s2);
System.out.println(somma1);
byte b1 = 100;
byte b2 = 29;
byte somma2 = (byte) (b1 + b2);
System.out.println(somma2);
}
}
L'output sarà:
129
-127
-127
Il primo risultato è giusto, ma il secondo?
Dato che i byte possono rappresentare i valori da -128 a 127, 100 + 29 = 129, quindi ho sforato (overflow) di 2 il limite massimo e ho ricominciato a contare da -128 ottenendo il risultato di -127... come potete immaginare un errore di questo tipo è gravissimo perché fornisce risultati totalmente sballati, con conseguenze disastrose!
Se siete interessati a conoscere un modo per superare questi limiti di rappresentazione, vi consiglio di leggere questo post.
Se siete interessati a conoscere un modo per superare questi limiti di rappresentazione, vi consiglio di leggere questo post.

Commenti
Posta un commento