Qual è il punto di calcolo di queste variabili in questo modo?

4

Al momento sto sfogliando il codice sorgente di un gioco molto popolare e ho trovato queste variabili all'interno di questa classe.

public static final BlockPos ORIGIN = new BlockPos(0, 0, 0);
private static final int NUM_X_BITS = 1 + MathHelper.calculateLogBaseTwo(MathHelper.roundUpToPowerOfTwo(30000000));
private static final int NUM_Z_BITS = NUM_X_BITS;
private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS;
private static final int Y_SHIFT = 0 + NUM_Z_BITS;
private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS;
private static final long X_MASK = (1L << NUM_X_BITS) - 1L;
private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L;
private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L;

Che senso ha di inizializzare in questo modo invece di calcolarlo una volta e inizializzarlo con la risposta?

    
posta GregoryNeal 30.04.2016 - 05:53
fonte

1 risposta

4

Il punto nel inizializzarli in questo modo è che rende chiaro al lettore da dove provengono i valori.

Posso osservare il codice e vedere che sta creando maschere di bit per i valori a 64 bit con le parti X, Y, Z dove i valori X e Z devono contenere almeno 30.000.000 e che sta usando lo spazio rimanente per i valori Y.

Immagina che il codice sia simile a questo:

private static final long X_MASK = 335544321
private static final long Y_MASK = 16383
private static final long Z_MASK = 335544321

Sarebbe chiaro come intendessero i valori? Hai imparato a memoria cos'è "2 ^ 25", e anche se lo hai, sai perché è stato scelto "2 ^ 25"?

    
risposta data 30.04.2016 - 06:11
fonte

Leggi altre domande sui tag