Qual a saída dos códigos?

Pegadinhas para aqueles que estão atrás de certificação.

short s  =  4 * 4 ;
short x = 64 , y = 4 ;
short z = x * y ;

a. 16 ; 256
b. erro de compilação na linha 2
c. erro de compilação na linha 3
d. erro de execução
e. nenhuma das anteriores

Opção “c”.
short não comporta 256 bits (bytes?).

Se não me engano comporta somente 128… :roll:

c :wink:

[quote=“Rafael Nunes”]Opção “c”.
short não comporta 256 bits (bytes?).

Se não me engano comporta somente 128… :roll:[/quote]

A resposta é C, mas o motivo ainda não é este. Se você tentar

short a = 64 * 4;

você verá que vai funcionar. Além do mais, o short é um tipo inteiro de 16 bits (de -32768 até 32767). Vamos lá, pessoal. Sugestões?

O resultado gerado pela multiplicação é por padrão um int :?:

[quote=“Daniel Quirino Oliveira”]Pegadinhas para aqueles que estão atrás de certificação.

short s  =  4 * 4 ;
short x = 64 , y = 4 ;
short z = x * y ;

a. 16 ; 256
b. erro de compilação na linha 2
c. erro de compilação na linha 3
d. erro de execução
e. nenhuma das anteriores[/quote]

A resposta é C .

Motivo : “x” e “y” devem ser valores constantes e o tamanho do resultado da multiplicacao (xy) ter no maximo 16 bits !!! Como 164 possui menos de 16 bits, bastaria apenas, para o codigo compilar sem erro , declarar tanto x como y como final !!! Mas como x e y não são final , da um erro de compilacão na linha 3 !!

Não entendi???

Rafael, nao eh tao complicado assim. Um short MULTIPLICADO por outro short pode dar um valor que nao eh um short. E soh :wink:

Então isso é presumido pelo compilador???

POOOOO***, Carlos!!! Era para deixar o povo queimar uns neurônios!!! :smiley:

Olá Pessoal…

por exemplo…

byte b1= 64; byte b2 = 4;

a multiplicação destes inteiros decimais é 256.A representação binária do decimal 256 e comportada por 9 bits.

portanto o statement :

nao compilaria, pois o padrão de bits dado como resposta nem sempre será o mesmo padrão de bits da expressão.

portanto se tivesse algo como :

dai tbm nao funcionaria porque apesar do valor estar represnetado em 9bits…ele faz parte do padrão de bits de um literal inteiro…oiu seja…32 bits…e uma operação com 2 operandos sendo byte , gera um int !!
a unica saida seria :

byte result = (byte)b1*b2; short result = (short) b1*b2; int result = b1*b2;

lembrando que neste caso aqui :

haverá perda de precisão…e o valor alocado não será 256.POrque a range de valores de um byte e de -128 à 127 e como tipo primitivos inteiros nao possuem overflow , e “didaticamente” falando…“faz a volta” (nossa que termo horrivel…! :smiley: ) e cai em um numero dentro do padrão de bit de um byte… :wink:
vejamos…se 128…corresponde ao valor -128 , então 256 corresponderia ao valor 0.

é isso ai…

Abraço a todos.