Operadores menos comuns

6 respostas
pipoassis

Boa tarde meus amigos,

Tenho uma pequena dúvida em relação ao uso de alguns operadores menos comuns na linguagem Java. Alguém conhece a função dos operadores “>>”, “<<” e “>>>”?

Muito obrigado

Abraço a todos :slight_smile:

6 Respostas

B

São operadores de bit shift

Se você tem um número binário 00010100 (20 em decimal),

00010100 >> 1 -> 00001010 (o mesmo resultado que uma divisão inteira por 2, 20/2 = 10)

00010100 << 1 -> 00101000 (multiplicação por 2, 20*2 = 40)

é um operador de shift de bits sem sinal

11000000 >>> 1 -> 01100000 (11000000 em complemento de dois é um valor negativo em decimal(em um numero de 8 bits))

enquanto

11000000 >> 1 -> 11100000 (mantém o sinal)

Espero não estar enganado.

Rafael_Nunes

É o contrário.
Dois operadores ‘>>’ deslocamento somente dos bits de representação numérica.
Três operadores ‘>>>’ desloca além dos bits de representação numérica, o bit de representação do sinal também.

T

Rafael, desculpe mas o Bruno é que está certo (>> = signed shift right, >>> = unsigned shift right).

O >>> não existe no C/C++ nem no C#, porque nessas linguagens existe o tipo "unsigned".

B

Ufa, pensei que li errado a documentação da Sun :smiley: Obrigado!

Rafael_Nunes

thingol:
Rafael, desculpe mas o Bruno é que está certo (>> = signed shift right, >>> = unsigned shift right).

Então, foi o isso o que eu quis dizer.
Com dois operadore ‘>>’ você desloca somente os bits do sinal, por exemplo -8 >> 1 vai resultar em -4. Ou seja, eu desloquei somente os bits que representam o número. (De 1000 para 0100)
Já com três operadores ‘>>>’, eu desloco além dos bits que representam o número, o bit do sinal também: -8 >>> 1 vai resultar [telefone removido]

Não é isso? Ou eu que to viajando?

T

Rafael, a idéia é que com o ">>" você copia os bits do sinal (que pode ser 0 ou 1), e com o ">>>" você só acrescenta bits zero. Você só "trocou as bolas" ou "bolou as trocas" - qual é o jeito certo de se dizer?

Por exemplo, se você fizer

(-1) >> 2 --> [1]111.1111.1111.1111.1111.1111.1111.1111 >> 2 --> 11[1]1.1111.1111.1111.1111.1111.1111.1111 == -1
(-1) >>> 2 --> [1]111.1111.1111.1111.1111.1111.1111.1111 >>> 2 --> 00[1]1.1111.1111.1111.1111.1111.1111.1111 == 1.073.741.823

É só testar.

Criado 12 de junho de 2008
Ultima resposta 12 de jun. de 2008
Respostas 6
Participantes 4