Java - Duvidas

paulo84

Power Member
boas, estou aqui com um problema, estive a ver um codigo de um jogo do xadrez que eu nao sei o quer dizer aquilo


Código:
public int getColor(int i, int j) {
    return color[(i << 3) + j];

e

Código:
        for (i = 0; i < 64; ++i)
          if (piece[i] == REI && color[i] == s)
              return attack(i, s ^ 1);

a minha duvida e mesmo aquilo do << e ^ que eu nc vi em lado nenhum :S

alguem me sabe explicar?

Cumps
 
se for como em c++, o << serve para deslocar os bits para a esquerda

ex:
000110000 << 3 = 11000000

se não me engano é o mesmo que multiplicar por 2 elevado a X, sendo X o número de deslocações, neste caso o 3

e o ^ será como um XOR, mas também aplicado aos bits

ex:
11001100 ^
01010101 =
10011001
 
A explicação do MPalhas parece-me correcta.

Em relação ao significado dos operadores no contexto do teu código, parece-me que o método getColor o que faz é simular uma matriz (i.e. o tabuleiro com as cores para cada posição) com um vector de 64 (8x8) posições (chamá-lo-emos de tabuleiro), sendo que neste caso, para acederes à linha 5, coluna 4, terias que utilizar algo do género: tabuleiro[5 * 8 + 4]. Na prática, se quisermos simplificar (ou obfuscar) isto, podemos fazer algo do género tabuleiro[(5 << 3) + 4] que é o que está no teu código, invocando o método getColor(5, 4).

No que diz respeito ao uso do XOR (bitwise), parece-me que serve apenas para "inverter" o lado que está a atacar, ou seja, se a cor que estiver a atacar for brancas ou 0, s^1 vai-te dar as pretas ou 1.

Em suma, devias arranjar um código mais limpo para aprender. Tenta dar uma vista de olhos no sourceforge pois devem existir lá bastantes (mais de 20) soluções mais legíveis.
 
Back
Topo