Salve a tutti di nuovo,
vi pongo qui di seguito un quesito molto intrigante.
Supponiamo di avere 64 bits, che in questo caso sono ordinati in un array 8x8, ma potrebbero essere ordinati anche tutti di seguito.
Dato che i bits sono 64, voglio convertirli in un solo numero di tipo long dato che long è costituito da 64 bits.codice:int[][] tMat1 = { {1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}};
Quindi uso il seguente codice per fare la conversione.
Tuttavia potenzaDi2 a un certo punto avrà un valore di -9223372036854775808, che è anche il tetto massimo per long. Quindi considerando l'esempio precedente quando c'è un 1 nella posizione più significative, long avrà già raggiunto il massimo consentito e l'aggiunta di altri 1 non influenzeranno il valore di long.codice:long nuovoNumero = 0; long potenzaDi2 = 1; for (int i = tMat1.length - 1; i >= 0; i--) { for (int j = tMat1[0].length - 1; j >= 0; j--) { System.out.println("power is " + power2); nuovoNumero += potenzaDi2 * tMat1[i][j]; potenzaDi2 *= 2; } }
Qualcuno ha qualche altra e migliore soluzione da proporre?
Grazie in anticipo.

Rispondi quotando

