Operadores

Aê pessoal …mais uma

[code]public class Shift{
static int i;
static int j;
public static void main(String argv[]){
i = 2;
j = i <<31;
i =i++;
System.out.println(j);
System.out.println(i);

&#125;

}[/code]

O q ele imprime?

Creio que seria j=33 e i=2

Olá Taz,

i << 31 equivale a i * 2³¹

então a saída será:

j=2*2³¹=2³²
i=3

está certo?

falow;

Acho que é:

j = 0 e i = 3;

Um int tem 32 bits. Quando o único bit significativo do i = 2 for deslocado 31x para a esquerda irá sair do container gerando zero como resultado. Ok?

Robson

Robson,

j é 0 e i (pasme!!!) é 2… faça o teste!!!

Quando vi da primeira vez pensei como vc… mas é como se ele não fizesse o incremento, portanto, é preferível usar

Abraço.

Eu só não consegui entender porque o j=0 eu fiz o teste e deu j=0. Alguém sabe me responder porque?

luidymorais,

vc empurra o 1 até ele despencar pelo lado esquerdo… por isso q o resultado é 0!! Detalhe: se fosse j = i &lt;&lt;30; ele não despencaria … hehehe

o i = 2 pq ele primeiro retorna o valor, depois incrementa e depois atribui, assim a atribuicao anula a incrementacao…