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
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
[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
Então isso é presumido pelo compilador???
POOOOO***, Carlos!!! Era para deixar o povo queimar uns neurônios!!!
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…! ) e cai em um numero dentro do padrão de bit de um byte…
vejamos…se 128…corresponde ao valor -128 , então 256 corresponderia ao valor 0.
é isso ai…
Abraço a todos.