Soma de shorts == erro

Fala aê, galera!

Olha só.
Não entendi bem o porque que quando fazemos a seguinte conta ocorre um erro de compilação:

short a = 10;
short b = a + a;

O erro é:

possible loss of precision
found   : int
required: short
                short b = a + a;
                            ^
1 error

Isso é porque 2 char somados passa o tamanho máximo de um char(16 bits)?

Porque isso não ocorre com int por exemplo…

Valeu!

A soma de dois shorts pode não caber num short.

Olá cara, primeiro vamos a um código funcionando pra você poder rodar seu programa:

[code]/*

  • Created on 16/08/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */
    package org.kinow.cert;

/**

  • @author Bruno

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class Shorts {

    public static void main(String[] args) {
    short a = 10;
    short b = (short) (a + a);
    System.out.println("B vale " + b);
    }

}[/code]

Agora a uma explicação um pouco mais técnica rs… não que eu seja alguém que possa falar algo assim…

As regras para adição… byte, char, int e short serão convertidos para inteiro na operação… poréeeeeeeeeem, se um dos valores for long, o resultado será dado em long, se um for float, o resultado será float, se um for double, o resultado será em double. Abraços, espero ter ajudado um pouco. Boa noite =]

Bem, qualquer operação entre dois numeros inteiros irá te voltar no minimo um int (pode ser long)
e entre dois numeros de ponto flutuante irá sempre te voltar um double.

So corrigindo, se algum operando for um float o resultado será um double :wink:

Booooooooooom dia, já é quase sexta!!! heheheh, valeu por tentar corrigir… mas cuidado para não passar dados inconsistentes para o guri… olha só, o que você disse… está ERRADO rsrsrs, vamos a explicação:

1 - double
2 - float
3 - long
4 - int
5 - char or short (char é um short sem sinal = 16 bytes de qualquer forma)
6 - byte

Para descobrir o tipo de retorno, faça o seguinte, pegue uma soma ae qualquer, float + double por exemplo… então vamos na lista básica acima e verificamos qual dos dois tipos está primeiro… portantooo… é DOUBLE, agora se fizermos float + int ??? É FLOAT! Não double meu caro…

Espero ter ajudado… e caso relutem e joguem garrafas, vaiem, reclamem que não está correto… mais uma exxxxxxxplicação, mas desta vez não sou eu que vou dá-la, e sim a SUN rsrsrs… abraços :wink:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arithmetic.html

Fiquei procurando outras fontes, para caso alguém duvidasse da SUN hehehe, brincadeira…

http://www.quepublishing.com/articles/article.asp?p=101368&seqNum=3&rl=1

http://www.cs.umd.edu/~clin/MoreJava/Intro/expr-mixed.html

Só pra constar hehehehe

public static void main(String[] args) { int i = 0; float b = 1.0f; float result = b + i; System.out.println(result); }

Compila, roda, tudo direitinnn.

Ok, galera!
Tuda a discurssão esclareceu bastante!

Resumindo então…

Para saber o retorno de soma (ou qualquer operação) entre tipos primitivos diferentes basta utilizar a tabelinha:

A preferencia será sempre do primeiro para o ultimo…

Quando se trata de operações de mesmos tipos o unico “problema” é quanto ao retorno dos tipos “char, short e byte”, pois esses retorna um “int”, certo?

Um long?
Como isso pode acontecer???

Bem… me corrigam se eu estiver errado…
O problema ai, ocorre quando uso valores literais por exemplo:

float a = 1.5; //Ocorre um erro de compilação...
float b = 1.5f; // Ok!!!

float c = 1.5 + 1.3; //Erro!
float d = 1.5f + 1.3; //Erro!
float e = 1.5f + 1.3f; //Ok!!!

float f = 10.5f;
float g = 11.7f; 

float h = f + g; // Tudo funciona perfect!

Isso pq, por default valores literais com casas decimais são double.

To certo ou to errado?

Valeu!

Corretíiiiiiiiiiiiiiiiiiiiiiiiissimo \o/ hahahaha, aeeeeeeee, e a soma de valores literais inteiros resultará em long, apppeeeeeeeeeeeeeeenas se você somar qualquer valor com um long, como int + long, short + long, byte + long, senão, só resultará em int, short + short = int, byte + byte = int, etccccc… rsrsrs, abraços cara, e sucesso.