Short * short =?

7 respostas
Rafael_Nunes

OLa,
O cv tinha explicado que o será gerado um erro de compilação se fizer:

short a = 10 short b = 100 short c = a * b;

Pois short * short pode gerar um número acima de short.
Porém eu fiz uma pergunta que não obrive resposta.
Isso é pressuposto pelo compilador? Independente de quais meus valores, o compilador sempre irá encarar como um erro?

7 Respostas

Rafael_Steil

Isso faz parte da especificacao da linguagem, portanto o compilador ja esta “prevenido” para esse tipo de situacao.

Na secao §5.6.1 da JLS ( http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#170952 ) tem uma explicacao da razao disso ocorrer.

Se voce ver la, dentre outros tipos, short sera “promovido” para int no caso de determinados operacoes ( entre elas a soma e a multiplicacao )

Rafael

Rafael_Nunes

E isto acontece com os outros tipos primitivos? Ou somente com short?

Sei que deve estar lá na especificação, mas meu inglês não me permite por momento entender o link lá… :oops:

Rafael_Steil

Acontece com os tipos inferiores a int: byte, short, ou char

Rafael

cv1

Epa! char? :shock:

louds

Qual o problema cv? char é 1 tipo numerico.

cv1

Ugh. Eu sempre caio nessa. :smiley:

Ironlynx

Como não custa nada lembrar:

For byte, from -128 to 127 (-27 to 27-1), inclusive

For short, from -32768 to 32767 (-215 to 215-1), inclusive

For int, from -[telefone removido] to [telefone removido] (-231 to 231-1), inclusive

For long, from -9223372036854775808 to 9223372036854775807 (-263 to 263-1), inclusive

For char, from 0 to 65535 inclusive


A JVM não tem instruções aritméticas para manipular diretamente valores do tipo short,byte e char,além dos valores booleanos.As operações desses tipos são tratados por instruções de operações do tipo int (Como iadd,imul…)
from JVMSpec

Criado 3 de fevereiro de 2004
Ultima resposta 4 de fev. de 2004
Respostas 7
Participantes 5