Algo utile ou complètement "bidon"??

Résolu
ninjagtr Messages postés 5 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 11 décembre 2006 - 11 déc. 2006 à 22:38
ninjagtr Messages postés 5 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 11 décembre 2006 - 11 déc. 2006 à 23:32
Bonjour,
Je suis tombé sur un bout de code et je ne sais pas s'il a une utilité (autre que de me faire chercher lol).

Voici le code :

int Devinez(int x)
       {
           int n=0;
           while(x)
           {
               n++;
               x &= x-1;
           }
           return n;
       }

Sur point de vue du code, je sais ce qui se passe, mais l'utilité de cette aglo me trouble. Je n'ai rien vu d'évidant pour l'instant.

Pour ce qui si connaisse bien en math, mais pas forcément en C, voici une petite explication de ce que fait ce bout de code :

On appel la fonction "Devinez" et on lui donne un argument  x de type entier.
Dans cette fonction on initialise une variable de type entier "n" à 0.
Dans la boucle while qui va s'executer si x est différent de 0, on va incrémenter la valeur n de 1 puis effectuer une opération de ET logique entre la valeur de x et la valeur de x-1 et ce résultat on le retourne dans x.
Dès que x sera nul, on sortira de cette boucle et la fonction Devinez retournera la valeur n qui aura pour valeur, le nombre d'itération de la boucle.

3 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 déc. 2006 à 23:14
Apparemment ca retourne le nombre de 1 dans la représentation binaire

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
ninjagtr Messages postés 5 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 11 décembre 2006
11 déc. 2006 à 23:32
Je viens juste de  faire fonctionner cette fonction sur un grand nombre de valeur de x.
Je constate que l'algo retourne la valeur 1 dès que x = 1 2 4 8 16 32 64 ....
En regardant de plus près les valeurs retournées pour les valeurs de x autre que 1 2 4 8 16 ... on y voit bien que les valeurs retournées correspondes au nombre de 1 de la représentation binaire de valeur x.
Ta étais plus rapide que moi vecchio56 .
Merci
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
11 déc. 2006 à 23:23
Salut:

D'après son nom ça semble comme un générateur de nombre pseudo-aléatoire.
0
Rejoignez-nous