PDA

View Full Version : [Java] Operazioni sui bit


Abdujaparov
06-07-2010, 11:26
Ciao a tutti ho un long da 64 bit. Di questi 64 bit, i primi 15 numeri più a destra rappresentano un id, i successivi 9 bit rappresentano un altro campo ecc ecc a gruppi di nove.
Per isolare il primo gruppo di 9 bit ho utilizzato una maschera in questo modo:


final String mask = "111111111000000000000000";

long mdb= (solutionID & Long.valueOf(mask, 2));



Dove solutionID è il long da 64bit iniziale.

A sua volta il campo di 9 bit è formato da tre gruppi di bit, da destra verso sinistra:

-minor number ->2bit
-major number ->2it
-cicle ->5bit

Al numero mdb applico altre tre maschere per estrarre i valori elencati:

-"11"
-"1100"
-"111110000"

Applico le maschere analogamente a quanto fatto sopra.
Purtroppo, però, in uscita ottengo valori un pò farlocchi. Volevo capire se è il problema è dovuto ad un mio errato calcolo o il problema è nel dato di ingresso.
Grazie a tutti, ciao ciao.

cionci
06-07-2010, 11:51
Perché applichi la maschera in questo modo ? Addirittura con una stringa ?
Per costruirti la maschera devi usare l'aritmetica binaria.

long mask = (1 << 9) - 1;

1 shftato a sinistra di 9 posizioni e poi ci togli uno per avere le prime 9 posizioni a 1.

int value1 = solutionID & mask;

Per ottenere i successivi 9 bit, utilizzi la stessa mask:

int value2 = (solutionID >> 9) & mask;

Per ottenere i valori dai 9 bit puoi operare allo stesso modo.