Bit hacks
Sto cercare di risolvere il seguente problema (mi serve per una possibile ottimizzazione in un programma):
L'idea base è calcolare i logaritmi interi e confrontarli. Sono poi arrivato alla seguente idea sulla quale non sono però sicuro..
Qualche idea migliore? Vi sembra corretto?
EDIT: Non funziona (anche nella versione corretta che avevo in mente e che ho modificato).. infatti se prendo 1000 e 101, si ha che ((101 << 1) ^ 101) = 1010 ^ 101 = 1111 > 1000 anche se i due numeri non hanno certamente lo stesso logaritmo intero in base 2...
EDIT 2: Che ve ne sembra invece del seguente test?
Dati due interi senza segno a $64-$bit $x$ e $y$ (con $x \le y$), trovare il metodo più efficiente per verificare se il loro logaritmo intero in base $2$ è lo stesso. Vorrei insomma sapere se l'uno più significativo è nella stessa posizione per entrambi i numeri.
L'idea base è calcolare i logaritmi interi e confrontarli. Sono poi arrivato alla seguente idea sulla quale non sono però sicuro..
((x << 1) ^ x) > y || (x & y >> 63 == 1)
Qualche idea migliore? Vi sembra corretto?
EDIT: Non funziona (anche nella versione corretta che avevo in mente e che ho modificato).. infatti se prendo 1000 e 101, si ha che ((101 << 1) ^ 101) = 1010 ^ 101 = 1111 > 1000 anche se i due numeri non hanno certamente lo stesso logaritmo intero in base 2...
EDIT 2: Che ve ne sembra invece del seguente test?
x > (x ^ y)
Risposte
Con XOR mi sembra ok: l'ultima espressione che hai messo, a me torna.