[RESOLVIDO] Dúvida em long

Tentei compilar este simples código na minha máquina:

[code]class VetorSimples
{
public static void main(String…daudhai){

	long x = 2147483648;

	System.out.printf("x: %d\n", x);
}

}[/code]

Mas obtive o erro de compilação:

5: integer number too large: 2147483648 long x = 2147483648; ^ 1 error

Como isso é possível? :-o O tipo long tem 64bits (63 + 1 pro sinal)!!!

class VetorSimples
{
	public static void main(String...daudhai){

		long x = 2147483648;

		System.out.printf("x: %d\n", x);
	}
}

o número 2147483648 é visto como um Integer e não como um Long… tente fazer isso (não sei se vai dar certo pq to sem IDE aqui)

class VetorSimples
{
	public static void main(String...daudhai){

		long x = 2147483648L; //Coloque um L do lado do numero

		System.out.printf("x: %d\n", x);
	}
}

Olá amigo,

De fato, colocando um L após o número funcionou. Mas, veja esse código:

[code]class VetorSimples
{
public static void main(String…daudhai){

	long x = 214748364846468456L;

	double f = 468f;

	System.out.printf("x: %d\nf: %f\n", x, f);
}

}[/code]

Observe que, do tipo float para double, ele converte automaticamente, pois não haverá perda de precisão. Agora, porque não acontece o mesmo com o long? Ou seja, porque int para long ele não faz automaticamente? :shock:

todos numeros que vc digita com pontos flutuantes o compilador reconhece como double por isso pra usar float vc utiliza o 'f".

Ele faz sim.

Veja:

int x = 10;
long y = x;

ok.

Acontece que aquele “10”, escrito de maneira literal, é um int. E você não pode escrever ints tão grandes. Por isso, o “L” para dizer que o literal é um long.

[quote=ViniGodoy]Ele faz sim.

Veja:

int x = 10;
long y = x;

ok.

Acontece que aquele “10”, escrito de maneira literal, é um int. E você não pode escrever ints tão grandes. Por isso, o “L” para dizer que o literal é um long.[/quote]

Humm, ok. Essa do literal sempre ser um int matou a charada. Obrigado! :thumbup: