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
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
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.
É 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.
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".
Ufa, pensei que li errado a documentação da Sun Obrigado!
[quote=thingol]Rafael, desculpe mas o Bruno é que está certo (>> = signed shift right, >>> = unsigned shift right).
[/quote]
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 2147483644
Não é isso? Ou eu que to viajando?
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.