English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

J'aimerais connaitre un algo tres efficace permettant de déterminer le nombre de bit à 1 à partir d'un nomre decimal.

Par exemple:

34 en binaire donne 100010 -> 2 bits à 1

2006-09-10 21:23:02 · 7 réponses · demandé par Anonymous dans Informatique et internet Programmation

7 réponses

Une solution simple est
1/ de regarder si le nombre est impair si oui le bit de droite
est un 1 donc je le compte

2/je divise par 2 (Attention c'est une division entière! la partie
décimale est tronquée!) ce qui a pour effet de bouger tous
les bits d'un cran vers la gauche et de perdre le bit qui
était le plus a gauche

3/ on recommence en 1/ tant que le nombre est non nul

Exemple en C (j'ai volontairement évite les subtilités du C pour rendre le programme plus lisible)

int x=34;
int compte=0;
do
{
if ((x & 1) ==1)
{
// impair donc je compte
compte = compte +1 ;
}
x=x/2;
}
while(x!=0)

2006-09-11 08:44:41 · answer #1 · answered by cd4017 4 · 1 0

L'idée c'est de décomposer ton nombre en puissance de 2, et de compter...

2006-09-11 04:57:01 · answer #2 · answered by Izem 3 · 0 0

je suppose que tu as l'algo qui fais la conversion du decimal au binaire,
une fois tu as le nombre en binaire, tu le stocke dans un veteur (tableau), une variable compteur, tu fais le parcours du vecteur et chaque fois tu trouve un 1 du l'incremente(vble compteur)
et voila le tour est joué.
je sais c'est pas tres malin mais efficace.

2006-09-11 04:39:47 · answer #3 · answered by tonton 3 · 0 0

Tu peux faire la correspondance :
1 0 0 0 1 0
32 0 0 0 2 0 = 34 !

Il faut marcher avec les puissance de 2

L'algo est le suivant :
somme (nombre de droite à gauche * 2 à la puissance de leur position-1)

e.g. 1*2^(6-1) + 0*2^(5-1) + 0*2^(4-1) + 0*2^(3-1) + 1*2^(2-1) + 0*2^(1-1) = 34

2006-09-11 04:38:50 · answer #4 · answered by Anonymous · 0 0

function nb_un(int i)
int j , k
k = 0
j = i
while (j>1)
k = k + (j mod 2)
j = j div 2
end while
if j = 1 then k = k+1
return k
end function

2006-09-11 04:38:06 · answer #5 · answered by Nicolas L 5 · 0 0

Tu programme en quelle langage.
Par exemple, en C, je te proposerai
1) transformer le nombre en chaine (format binaire) avec sprintf
2) lire la chaine et compter le nombre de "1"

2006-09-11 04:37:00 · answer #6 · answered by Shaheen 5 · 0 0

T'as pensé à les additionner?

2006-09-11 04:29:13 · answer #7 · answered by Big Jim 3 · 0 0

fedest.com, questions and answers