Operadores Binarios

Bom dia,

Algeum poderia me ajudar em relação a uma breve explicação entre esses operadores
<<, >>, |, &, ?
Tenho um exercicio para fazer usando esses operadores binarios, procurei na internet, mais não explicam direito … :frowning:

Na web existem diversos exemplos.
Acho que você não procurou direito.

Cuidado com o conceito. Operador binário é aquele que atua sobre dois operandos, não necessariamente nos valores binários.
Seguindo essa definição, ? não é um operador binário, mas sim um operador ternário (três operandos).

Veja um exemplo. Note que o tipo int em Java usa 32 bits (4 bytes), estou listando apenas os últimos 4 bits dos exemplos.

[code]public class Binario {

public static void main( String[] args ) {

    // 2 em binário: 0010
    int n1 = 2;

    // 3 em binário: 0011
    int n2 = 3;

    // desloca os bits de n1 uma casa para a direita
    // 0010 (2) vira 0001 (1), preenchendo com zeros a esquerda
    System.out.println( n1 >> 1 );

    // desloca os bits de n1 duas casa para a direita
    // 0010 (2) vira 0000 (0), preenchendo com zeros a esquerda
    System.out.println( n1 >> 2 );


    // desloca os bits de n1 uma casa para a esquerda
    // 0010 (2) vira 0100 (4), preenchendo com zeros a direita
    System.out.println( n1 << 1 );

    // desloca os bits de n1 duas casa para a esquerda
    // 0010 (2) vira 1000 (8), preenchendo com zeros a direita
    System.out.println( n1 << 2 );

    // OU
    // 0010 (2)
    // 0011 (3)
    // ----
    // 0011 (3)
    System.out.println( n1 | n2 );

    // E
    // 0010 (2)
    // 0011 (3)
    // ----
    // 0010 (2)
    System.out.println( n1 & n2 );

}

}[/code]

Dê uma lida aqui: http://en.wikipedia.org/wiki/Bitwise_operation
E aqui: http://pt.wikipedia.org/wiki/Lógica_binária

[]'s

[quote=jorhudson]Bom dia,

Algeum poderia me ajudar em relação a uma breve explicação entre esses operadores
<<, >>, |, &, ?
Tenho um exercicio para fazer usando esses operadores binarios, procurei na internet, mais não explicam direito … :([/quote]
<< deslocamento de bits para a esquerda se você tiver: byte valorBinario = 3; binario = valorBinario << 2; ficara com o valor 12 pois, o valorBinario em bits seria igual 00000011 ao deslocarmos os bits 2 casas para esquerda teremos 00001100, que equivale a 12 em binário

>> deslocamento de bits para a direita, conforme o exemplo acima se a gente fizer:

byte valorBinario = 3; binario = valorBinario << 2; binario = valorBinario >> 1; ficara com o valor 6 pois, o valorBinario em bits seria igual 00001100 ao deslocarmos os bits 1 casa para direita teremos 00000110, que equivale a 6 em binário

| (or bit a bit) , se tivermos dois valores como 12 e 1 em binario e fizermos um or bit a bit teremos como como resultado o valor 13 pois ele compara bit por bit e se um dos bits comparados estiver “ligado” ele vai retornar 1
00001100 //12 | 1
00000001
00001101 //= 13

& (and bit a bit) , se tivermos dois valores como 13 e 1 em binario e fizermos um and bit a bit teremos como como resultado o valor 1 pois pois ele compara bit por bit e somente se os dois bits estiverem “ligados” ele vai retornar 1, no caso somente o bit menos significativo está ligado
00001101 //13 | 1
00000001
00000001 //= 1

? é um operador ternário não tem nada a haver com operadores bit a bit. Ele funciona da seguinte maneira: variavel ? chamaEstaFuncaoSeVerdadeiro() : chamaEstaFuncaoSeFalso;é equivalente a:

if (variavel) chamaEstaFuncaoSeVerdadeiro(); else chamaEstaFuncaoSeFalso;