Eu tava pensando hoje aqui, e fiquei com uma dúvida cruel.
Olhem o Código Abaixo:
short um = 1, dois = 2;
short resul;
resul = (short) (um + dois);
Complia, Correto? E eu faço a conversão baseado no fato de qualquer soma resulta pelo menos em um int.
Agora, se eu converter desse jeito, não compila:
short um = 1, dois = 2;
short resul;
resul = (short) um + dois;
Provavelmente, por causa dos parenteses. Mais ai é que ta: Com ou sem parenteses, a expressao continua a mesma, não é? Porque a soma tem procedencia maior do que a Conversão.
[quote=thingol][quote=Jaba]Com ou sem parenteses, a expressao continua a mesma, não é? Porque a soma tem procedencia maior do que a Conversão.
[/quote]
Onde é você leu isso? A conversão tem precedência (não “procedência”) maior que a soma. Portanto as expressões são diferentes. [/quote]++;
E é justamente isso que acontece: como a precedência da conversão é maior, primeiro se converte a variável um para short (o que é inútil, pois ela já é desse tipo) e depois se soma, resultando em um int, não podendo-se atribuir esse valor em outro short.