2 questões!

E ai Javeiros,
sou novo por aqui, estou começando com estudos para certificação e gostaria de compartilhar informações…
coloco aqui 2 questoes que achei interesante!

1)Quais das quetoes resulta em um valor positivo?
a. int x = -1; x>>>5;
b. int x = -1; x>>>32;
c. byte x = -1; x>>>5;
d. int x = -1; x>>5;

  1. O que resulta compilar o codigo abaixo?
    public class Conditional{
    public static void main (String args[]){
    int x = 4;
    System.out.prinln(“valor é”+((x>4)?99.99:9));
    }
    }
    a. A saída: valor é 99.99
    b. A saída: valor é 9
    c. A saída: valor é 9.0
    d. Erro de compilação na linha 5

a 1) eu n sei, soh sei q a B e a C n eh…

a 2) eh a B

Oi

brainn, eu não fiz as contas aqui não, mas por olhar, eu acho que a número 1 a resposta é a letra C… Mas por garantia, quando chegar em casa eu vou fazer a contas na mão e vejo se eu acertei…

T+

Cuidado com essa 2ª pessoal parece meio obvia!
viu Felipe !!!

Até mais galera!

prinln dá erro…
Se você tiver digitado errado, então é a opção B.
Quanto a primeira questão eu não faço nem idéia…

A resposta da 2 não é B …

1a D - o operador >>> é o de deslocamento a direita sem sinal, que preenche com zeros a esquerda.

e

2a C. - é assumido a maior precisão, portanto o resultado é um ponto flutuante mesmo…

Acertei ? :?:

vc acredita se eu disser que eu enxerguei o contrário … :oops:

[quote=“FabioAzul”]1a D - o operador >>> é o de deslocamento a direita sem sinal, que preenche com zeros a esquerda.
[/quote]

Tipo, o certo é só o A .

a letra D esquece exatamente por não ser o >>>,

a letra B esquece pq " vc faz a volta " exata, isto é, o inteiro tem 32 bits, vc desloca 32 bits para a direita, isso equivale a um deslocamento de 0 bits … naum muda nada

a letra C fiquei na dúvida, mas como vc está fazendo a operação com o Inteiro (32 bits) e guardando num byte (8 bits), ia precisar de pelo menos um deslocamento maior que 24 bits para mudar o sinal…

Respondendo:

  1. resposta “a”

  2. resposta “d” mas no seu codigo o erro eh na linha 4 System.out.prinln(“valor é”+((x>4)?99.99:9)); prinln…

Vamos as respostas:

1-> letra a
2-> letra c (desconsiderando o erro de digitação do println!)

Alguem discorda?
alguem arrisca alguma explicação?

Por que 9.0 e não 9?

Pq que qdo vc tem duas opções com tipos de precisão diferente, o tipo assumido é o de maior precisão. Qdo vc “imprime” um número ponto flutuante, ele por padrão vem com o “.0”.

[quote=“Brainn”]Vamos as respostas:

1-> letra a
2-> letra c (desconsiderando o erro de digitação do println!)

Alguem discorda?
alguem arrisca alguma explicação?[/quote]

As explicações que eu dei anteriormente estão corretas ?

Mas as comparações estão entre int x = 4 e 4. Onde entra o ponto flutuante aí?
Fiz o teste e dá 9.0 mesmo, só não entendi o por quê…

eu fiz o teste aki… a C da 1 nem compilo (acuso q requeria um int e encontrou um byte)…
olha o resultado:

A) 134
B) -1
C) Deu erro
D) -1

na 2 eu pensei q n tinha prob um resultar um tipo diferente do outro… mas pelo q eu vi foi feita a conversao e retornou 9.0…

Respostas:

  1. A
  2. C

esta correto!

e se fosse assim?
System.out.println(“valor é”+((x>4) ?“TESTE”:99.99));

da erro… soh funciona assim:

System.out.println(“valor é”+((x>4) ?“TESTE”:99.99 + “”));

pq dai forca a converter pra string

ok!
para finalizar, se na 2ª fosse:

System.out.println(“valor é”+((x>4)?“teste”:9));

ia dar erro tb… qndo eh um objeto tem q ser dos dois… dai pra fazer isso soh se for convertido a forca pra string…

[quote=“RafaelJ”]Mas as comparações estão entre int x = 4 e 4. Onde entra o ponto flutuante aí?
Fiz o teste e dá 9.0 mesmo, só não entendi o por quê…[/quote]

acho que me expressei mal…

qdo os resultados possíveis são de tipos diferentes, o tipo de maior precisão é o considerado. Se vc ver no comando vc pode ter um [color=“red”]double[/color] ou um [color=“blue”]int[/color] como resultado. No caso, o de maior precisão é o [color=“red”]double[/color].

System.out.prinln(“valor é”+((x>4)?[color=“red”]99.99[/color]:[color=“blue”]9[/color]));