Bonjour. Je souhaite écrire une fonction int CreateMask(int borne) qui retourne un "masque de bit" en fonction de la borne:
exepmple:
Ma première idée, intuitive mais peu rapide, est de partir d'un "masque plein" et de le décaler autant de fois que necessaire:CreateMask(4) retourne 0x0000000F
CreateMask(8) retourne 0x000000FF
CreateMask(6) retourne 0x0000003F
etc
et ça marche. Pout toutes les valeurs de borne de 0 à 32. (j'ajouterai plus tard un test sur l'argument)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 unsigned int CreateMask(unsigned int borne) { int i; unsigned int ff = 0xFFFFFFFF; for(i=borne; i<32; i++) { ff = ff >> 1; } return ff; }
Ensuite je me dit que ce serait équivalent et bien plus rapide de faire:
mais je ne comprends pas pourquoi, ça ne marche pas pour borne = 0;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 unsigned int CreateMask(unsigned int borne) { unsigned int ff = 0xFFFFFFFF; ff = ff >> (32-borne); return ff; }
Au lieu d'obtenir 0x00000000 j'obtient 0xFFFFFFFF (alors qu'avec la premiere fonction avec la boucle for, ça marchait)
Alors bon, la solution est simple, je commence par tester la valeur de borne, et si elle vaut 0, je retourne 0.
Mais je veux comprendre pourquoi ça marche pas?
Merci d'éclairer ma lanterne!
Biosox
Partager