Je veux trouver le moyen le plus rapide d'obtenir l'indice du bit de poids le plus bas d'une longueur longue. à savoir:Indice du bit de poids le plus bas
00101001001000 -> 3
Les solutions impliquant un bouclage et un décalage sont trop lentes. à savoir:
int i;
if(bits == 0ULL) {
i = 64;
} else {
for(i = 0;!(bits & 1ULL);i++)
bits >>= 1;
}
EDIT: Informations sur l'utilisation
La fonction qui utilise ffsll ne peut pas vraiment réduire son utilisation, mais ici il est (simplifié bien sûr). Il parcourt simplement les indices et fait quelque chose avec eux. Cette fonction est peut-être la plus utilisée dans toute mon application malgré une mise en cache de sa valeur. C'est un générateur de mouvement légal dans mon moteur de recherche alpha-beta.
while(bits){
index = ffsll(bits);
doSomething(index);
index &= index-1;
}
Que signifie "trop lent"? Combien de temps cela prend-il à toute la durée de la course? – sambowry
ce code s'exécute dans 7.2secs dans mes tests où ffsll s'exécute en 0.2secs. c'est une réduction de 97%. trop lent;) – dharga
Dupliquer de http://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set –