Ciao a tutti, sto cercando di trovare un modo più "skilloso" di sapere fra quali potenze di 2 si trova un numero, però non facendo un ciclo normale verso il numero o dal numero verso il 2 guardando se è effetivamente una moltiplicazione ripetuta di due, ma giocando sul numero in binario.
Sulla carta ho trovato 2 soluzioni, la prima è questa:
es. 50:
110010
devo annullare tutti gli 1 tranne il primo a sinistra per ottenere appunto la prima tra cui si trova(100000 sarebbe 32 appunto).
Il problema è: come faccio a salvare il primo bit?
Il secondo sistema mi è venuto facendo questo:
1 = 1
11 = 3
111 = 7
1111 = 15
11111 = 31
E visto che aggiungendo un uno il numero aumenta di una potenza di due(1-3 2, 3-7, 4, 7-15, 8, 15-31 16 ecc...)
Ho fatto questo:
110010 = 50
faccio sparire il primo bit a sinistra
10010 = 18
Sottraggo e ottengo 32
Devo praticamente troncare parte del numero dal primo 1 a sinistra al secondo 1 a sinistra, ad esempio
80 = 1010000
diventa 10000 = 16
80 - 16 = 64
Per la potenza a cui precede basta moltiplicare per due quella cui segue però la parte centrale del lavoro(togliere o annullare i bit) riesco a farla soltanto mano, non sono pratico di operazioni bit-a-bit (è per questo che sto facendo sta strada più scervellante) quindi se qualcuno mi aiuta mi fa un grosso favore!
ciao e grazie![]()