Newsgroup: it.comp.java
Titolo: Long quante cifre?

Ma sto maledetto "long" puņ reggere un numero di quante cifre?? >:-|
anzi, se possibile, vorrei sapere qual'e' l'ultimissimo numero + grande che
puņ memorizzare prima di imbattersi in overflow o comportamenti strani...
sto impazzendo...argh...
Simo

 Simo
Non si può strettamente parlare di cifre.
Cmq va da Long.MIN_VALUE a Long.MAX_VALUE
Inviato da 
www.mynewsgate.net

 Inviato da 
www.mynewsgate.net
Ti ringrazio per la risposta.
E' che da stamattina quelle poche e misere basi di Java che mi ero fatto
stanno cadendo a pezzi...
Altra domanda:
long a;
int b,z;
a = b*z;
Non dovrebbe , Java, farmi un cast implicito e trasformarmi il risultato di
b+z in un long ?? (long abbraccia un range + grosso dell' int, dunque non ci
sono rischi).
Ditemi voi....
Grazie ancora.

 Grazie ancora.
Ma b*z o b+z ? ;-)
La tua operazione in effetti fa esattamente quello che dici.
Il problema e che il calcolo può sforare.
int*int o int+int da un int che viene assegnato ad un long.
Ma hai provato a sommare, chessò 100 al valore di Integer.MAX_VALUE e vedere
il risultato?
Mi ricordo cuteftp4 che dopo aver trasferito 2GB iniziava a dire che erano
stati downloadati -nnn kb! Evidentemente avevano usato un tipo analogo
all'int di java (4 bytes signed) e stimato che fosse sufficiente (non
sapevano delle mie doti di downloader!).
Insomma è quindi necessario un cast esplicito in modo che venga allocata
un'area di memoria sufficientemente grossa in cui contenere il risultato
dell'operazione prima che venga assegnato alla variabile.
Inviato da 
www.mynewsgate.net

 sono rischi).
Si, ma prima fa il conto e poi il cast. Se nel calcolo c'é un overflow sono
cavoli tuoi :)
conviene fare:
long a;
int b,z;
a = ((long)b)*z;
cmq per questi dubbi fai riferimento a:
http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html
The Java Language Specification
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it/imsv/

 a = ((long)b)*z;
Direi che dovrebbe abbastare anche 
a = (long)b*z;
Inviato da 
www.mynewsgate.net

 a = (long)b*z;
Credo che invece così è come se il cast non ci fosse perché viene fatto su
b*z che è un int e quindi se c'é stato overflow ormai è troppo tardi.
Mi spiego meglio
a = (long)b*z
è come se fosse:
int b,z,temp;
long a;
temp = b*z; //attenzione: temp è un int
            // rischio di overflow
a = (long) temp;
mentre:
a = ((long)b)*z;
è come se fosse
int z;
long temp, b, a;
temp = b*z; //temp e b sono long! 
            //nessun overflow
a = temp;


 a = (long) temp;
//int b,z,temp;
int b;
int z; //più leggibile, una riga per dichiarazione
       //temp non c'è
//long a;
long a
//temp = b*z; //attenzione: temp è un int
             // rischio di overflow
a = (long) b*z; //alloca un long, stipaci il risultato e assegnalo ad a
Comunque in questi casi banali nulla è meglio di un test:
<code>
public class Test {
 
	public static void main(String[] args) {
 
		//b e z sono abbastanza grossi
		int b = Integer.MAX_VALUE; 
		int z = Integer.MAX_VALUE;
		long a;
 
		a = b*z;
		System.out.println("b*z = " + a);
 
		a = (long)b*z;
		System.out.println("(long)b*z = " + a);
 
		a = ((long)b)*z;
		System.out.println("((long)b)*z = " + a);
	}
}
</code>
Inviato da 
www.mynewsgate.net

Con questo rispondo a tutti.
In java non c'è overflow.
Pensate all'insieme numerico come ad un anello chiuso.
Se ad un MAX_VALUE aggiungete un'unità, il valore risultante sara MIN_VALUE.
MIN_VALUE ----- 0 ----- MAX_VALUE ----- MIN_VALUE
class test {
     public static void main(String[] args) {
         int max = Integer.MAX_VALUE;
         System.out.println("Integer.MAX_VALUE......." + max);
         System.out.println("Integer.MAX_VALUE + 1..." + (max + 1));
         byte a = Byte.MAX_VALUE;
         byte b = (byte)(a + 1);
         System.out.println("Byte.MAX_VALUE.........." + a);
         System.out.println("Byte.MAX_VALUE + 1......" + b);
         }
}
-- 
Sergio Pedone
GNU/Linux Slackware
Java

 MIN_VALUE ----- 0 ----- MAX_VALUE ----- MIN_VALUE
[CUT]
Lo avevo detto già io, forse non così bene, nello stesso thread parlando di
cuteftp, che non è fatto in java.
Cmq non si parlava streattamente di overflow ma di cast e conversioni.
L'esempio che hai riportato (somma a MAX_VALUE)  può portare a risultati,
coerenti con le spec,la logica binaria etc..., ma 'inaspettati' se non gestiti
bene, come è capitato a Simone.
Inviato da 
www.mynewsgate.net

MIN_VALUE.
E' quello che intendevamo per overflow.
