ninjagtr
Messages postés5Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention11 décembre 2006
-
11 déc. 2006 à 22:38
ninjagtr
Messages postés5Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention11 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.
ninjagtr
Messages postés5Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention11 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
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 11 déc. 2006 à 23:23
Salut:
D'après son nom ça semble comme un générateur de nombre pseudo-aléatoire.