20 de mar. de 2006

Shift and Bitwise Operators

Com dúvidas do tipo: Porque laranja chama "laranja" e limão não se chama "verde"? Perguntei porque existem os pares de operadores binários: |, & ; <<, >> mas não existe o par <<< e >>>.

Verificando no site da SUN (http://java.sun.com/docs/books/tutorial/java/nutsandbolts/bitwise.html ); a diferença existente basicamente se restringe aos operadores >> e >>>.
O primeiro (>>) desloca bits para a direita, completando à esquerda com o bit mais significativo, ou seja, se fizer uma operação de deslocamento com um número negativo (sinalizado), ele manterá o sinal. No outro caso (>>>), os bits são deslocados para a direita, porém completa-se com o bit "0" à esquerda; ou seja, uma operação não sinalizada.

public class jCalc {
    public static void main(String[] args) {
        byte a=-16,b=1;
        int op=0;
        op = (a >>> b);
        System.out.println(op);
    }
}

Se a operação fosse (>>) o resultado seria -8
Porém, com o operador ">>>", o resultado é: 2147483640

Mas porque não existe, mesmo assim, o operador "<<<"?
Porque não faria sentido deslocar bits a esquerda e completar com "0" a sua direita, uma vez que a sinalização está no bit mais significativo (a esquerda) e o operador "<<" já completa com zeros.

Nenhum comentário: