Nombre de bits à 1 dans un unsigned / index du 1er bit à 1
J'ai écrit un programme de Sudoku en C
Celui-ci utilise intensivement les deux macros suivantes :
Code:
1 2 3 4
|
// x est un unsigned dont seuls les 16 premiers bits peuvent etre a 1
#define Count_bit(x) (count_bit[x]) // nb de bits a 1 ds x
#define First_bit(x) (first_bit[x]) // numero du premier bit a 1 ds x |
Deux tableaux de 2^16=65536 unsigned char sont precalcules et me permettent d'obtenir les valeurs voulues :
Code:
1 2
| unsigned char count_bit[65536]
unsigned char first_bit[65536] |
Le pb est que la consultation de ces tables est couteux en temps d'execution !
Je sais qu'il existe une instruction x86 pour l'index du premier bit a 1 : bsf ...
Mais je ne m'y connais pas assez en assembleur.
J'aurai besoin du code assembleur pour ces 2 fonctions (dans le but de le copier-coller dans mon prog (sous Visual C++ 6)) ...
Merci d'avance ...