1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java - Duvidas

Discussão em 'Programação' iniciada por paulo84, 15 de Setembro de 2008. (Respostas: 2; Visualizações: 503)

  1. paulo84

    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
     
  2. MPalhas

    MPalhas Power Member

    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
     
  3. AliFromCairo

    AliFromCairo Power Member

    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.
     

Partilhar esta Página