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);
}
}[/code]
O q ele imprime?
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);
}
}[/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 <<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…