@Fig
Est-ce que c'est bon ou pas, les procédures 32 et 64 bits?
Parce que je comprends pas bien la question!
Je vois et lis "puissance de 2 supérieure à n".
D'accord mais supérieur, ce n'est pas précis:
- Strictement supérieur?
- Supérieur ou égal?
Et les exemples ne précisent pas :
1024? Ça doit donner quoi? 1024 ou 2048?
Je choisis LZCNT parceque BSR n'est pas assuré de te donner le résultat prévu avec une source à zéro.
Donc, ce qui serait bien de préciser, c'est la séquence voulue de 0 à 9 au moins :
Ici, concrètement, j'ai:
0 : 1
1 : 2
2 : 4
3 : 4
5 : 8
6 : 8
7 : 8
8 : 8
9 : 16
Etc...
Avec ce code copié:
Code : Tout sélectionner
ProcedureDLL.L Livide32(X.L)
! mov ebx, [p.v_X]
! shl ebx, 1
! mov eax, 1
! lzcnt ecx, ebx
! shl eax, cl
ProcedureReturn
EndProcedure
Mais, on peut patauger longtemps...
1 1 2 2 4 4 4 4 8 8 ...
0 1 2 2 4 4 4 4 8 8 ...
1 2 4 4 8 8 8 8 16 16 ...
2 2 4 4 8 8 8 8 16 16 ...
Donc, précise s'il-te-plaît... (précise aussi si tu dois prendre en charge une source négative)