Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Array e operatore shift

    Salve a tutti vorrei una mano nella comprensione di una parte di codice.
    Il codice è il seguente:

    codice:
    private static final int[] WINS = {   
          //Caselle orizzontali  
          bit(0) | bit(1) | bit(2),   
          bit(3) | bit(4) | bit(5),   
          bit(6) | bit(7) | bit(8),   
          //caselle verticali  
          bit(0) | bit(3) | bit(6),   
          bit(1) | bit(4) | bit(7),   
          bit(2) | bit(5) | bit(8),   
          //caselle diagonali   
          bit(0) | bit(4) | bit(8),   
          bit(2) | bit(4) | bit(6)   
      };
    Qui praticamente viene creato un'array, quello che non capisco è che cosa viene messo all'interno di questo array in quanto il metodo "bit" che viene continuamente richiamato è il seguente:

    codice:
    private static int bit(int i) {   
        return 1 << i;   
      }
    Spero possiate darmi una mano grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    divide et impera è la strada sempre valida. C'è da capire come funzionano gli operatori shift e logici bitwise in java (risposte che avresti trovato in qualsiasi manuale o con una semplice ricerca in internet). Ad ogni modo, per i pigri:

    x << y: sposta x a sinistra di y "posizioni", riempendo di "0" i nuovi posti che si creano.

    In altre parole, 3 << 2 vuol dire:
    codice:
    3 = 00000011
    sposto a sinistra di 2 posizioni
    codice:
    00001100 = 12
    Analogamente, l'OR bit a bit restituisce quanto atteso ("1"nelle posizioni in cui almeno una delle cifre vale 1 e 0 se entrambe le cifre sono 0)
    codice:
    3 | 6 = 7
    3 = 00000011
    6 = 00000110
    7 = 00000111
    Quindi venendo al tuo esempio, e codifico solo la prima terna
    codice:
    bit(0) | bit(1) | bit(2) =
    
    (1 << 0) | (1 << 1) | (1 << 2) =
    
    00000001 << 0 = 00000001 |
    00000001 << 1 = 00000010 |
    00000001 << 2 = 00000100 =
                  = 00000111 = 7
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie mille per la risposta, io quello che non riuscivo a capire era proprio il funzionamento dell'operatore OR all'interno dell'array

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.