|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Palermo
Messaggi: 1079
|
[Java] Operazioni sui bit
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: Codice:
final String mask = "111111111000000000000000"; long mdb= (solutionID & Long.valueOf(mask, 2)); 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. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:01.



















