Olá pessoal, tenho uma dúvida em relação ao método getKeyStates().
Então, li a API e percebi que este é responsável por retornar se alguma tecla esta precionada (retornando um valor != de zero. ou retornando zero, caso contário).
Então usando o operador lógico & (sem entrar em curto (&&)):
Analisando o primeiro caso, o operador lógico & (sem entrar em curto) testa as duas condições, independete se a primeira condição já for falsa.
No entanto, usando o operador lógico com curto (&&) se a primeira condição já for falsa ele nem testa a segunda. Independente se eu usar && ou & ele só vai funcionar se as duas condições for verdadeira.Não consigo entender o porque a segunda maneira não fica funcional. Alguém pode explicar?
Vc quer comparar códigos diferentes e espera a mesma resposta ? Não dá né…o segundo trecho são 2 expressões, onde inclusive deveria estar assim “(UP_PRESSED != 0)”.
Falando nisto, vc sabe q esta expressao sempre vai ser verdadeira, então não faz sentido em testá-la, afinal UP_PRESSED vale 2, portanto, SEMPRE diferente de zero…
Isto indica claramente que o 2o modo está errado de se usar UP_PRESSED. Esta constante tem que ser usada conforme o 1o trecho, que é igualzinho ao que está no javadoc.
Quando ao curto, aprendeu certinho, é isto mesmo como funciona.
[quote=boone]O que falta pra vc é estudar sobre operações bitwise.
Em qualquer linguagem você aplica isto.Me admirei agora por vc não saber !
Bom, depois deste dica, é só usar o tio Google que você de cara encontra material explicando porquê este teste faz sentido.[/quote]
Hmm, vlw pela dica.
Pesquisei sobre bitwise. Agora entendo melhor o operador binário (sem curto).
Supondo:
if( (keyStates & UP_PRESSED) != 0)
Será realizado assim:
Ele irá comparar bit a bit a variável int keyStates com a variável int UP_PRESSED, como nesse caso o operador bitwise usado é &, somente será retornado 1 se todos os bits comparados forem iguais.
Em resumo, a operação compara para ver se o respectivo bit que interessa está ligado em keyStates. Se estiver, o valor desta operação é diferente de zero.