Soma de doiis inteiros

4 respostas
B
Alo amigos,

Estou com diificuldade para entender a seguinte questão:

Se eu defiinir duas variaveis tipo short (16bits) com o maximo valor permitdiito em cada uma delas ou seja 32767 e uma terceira variavel para receber a soma das duas anteriores tipo int (32 bits). funciona normall.

exemplo 1

short  shortUm = 32767;

short  shortDois = 32767;

int  intTres = shortUm + shortDois;

System.out.println("Valor de intTres: " + intTres);

Resultado 65534

Agora se usar a mesma ideia com variaveiis tipo int e o resultado em uma tipo long
a soma é sempre -2, porque? Isto não poderia ser um prolblema em um programa cujos dados por algum motivo cheguem ao limite de uma das variaveis?
exemplo 2
int intUm = [telefone removido]; // limite máximo
int intDois = [telefone removido] ; // limite máximo
long longTres = intUm + intTres; // limite máximo de um long é 9223372036854775807
System.out.println("Valor de longTres é: " + longTres);
Resultado -2

Claro que se no exemplo2 todas as variaveis forem tiipo long, sem problema
obrigado pela atenção,
Bambil

4 Respostas

M

simples Bambil, oq ocorre é o seguinte:

o java soma os teus dois ints, o resultado disso, é um int… pq toda operação retorna um int, digo, short + short retorna int, byte + byte, retorna int… byte - short retorna int… em java, tudo retorna um int, qnd tu faz int + int, com seus valores maximos, ele vai voltar um int, claro, um valor errado, ja q um int nao pode armazenar os valores maximos de 2 ints, e atribui a um long… logo, é a mesma coisa q

long l = (int) ( int1 + int2 );

eu diria pra tu fazer essa soma com longs, caso teu numero seja realmente muito grande…

B

Valeu Matheus, mas ainda fica a duvida:

assim funciona

public class TestaInt {

public static voiid main(String[] rgs) {

int valor1 [telefone removido];

int valor2  [telefone removido];

System.out.println("Valor de retorno: ", (long)  (valor1 + valor2);   // converte ao imprimir

// Valor mostrado no monitor    21474836472147483647

}

}
Assim não funciona

public class TestaInt {

public static voiid main(String[] rgs) {

int valor1 [telefone removido];

int valor2  [telefone removido];

long valor3 = (valor1 + vallor2); // Tentei converter antes de imprimir

System.out.println("Valor de retorno: ",  valor3);  // imprime -2

}

}
A

Então Bambil…

Vou dizer o que nosso amigo tentou te explicar…

Se vc fizer qlqr calculo em java… usando int, ele vai te retornar sempre int… não importa que vc escreva

long = int + int

pq antes dele atribuir o valor da soma no long ele ja fez o calculo e obteve o resultado em int(errado se as variaveis int estiverem no seu limite).

logo… se vc deve tomar cuidado com os valor que esta trabalhando, pois se algum dia eless atingirem valores que nao caibam nas variaveis… xiiii

Vc deve perguntar… “Mas se for um número muito absurdo ?”

Um número absdurdo seria código de barra de produtos, mas esses são tratados como String… assim podem ser “quebrados” e cada pedaço seria um long…

Fui !!!

B

Valeu meu caro Acosta, agora fechou
abraço forte,
Bambil

Criado 28 de outubro de 2004
Ultima resposta 28 de out. de 2004
Respostas 4
Participantes 3