dziwny program w C

trophy250

Nowicjusz
Dołączył
23 Listopad 2008
Posty
83
Punkty reakcji
0
[background=rgb(223, 223, 185)]Witam Dostałem dziwny program który mnie zdziwił i nie do końca go rozumiem. "Napisz program który wyznaczy liczbę niezerowych bitów w słowie unsigned int" Jak to zrozumieć? Myślałem na początku, że to może chodzi o przekształcenie podanej liczby na binarną i jakoś zliczyć te bity które są nie zerowe Dobrze kombinuje? [/background]
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Na mój gust musisz najpierw przetłumaczyć słowo na system binarny (tutaj masz ściągę) a następnie po prostu zliczyć jedynki.
 

trophy250

Nowicjusz
Dołączył
23 Listopad 2008
Posty
83
Punkty reakcji
0
To tak jak myślałem ;) ale jak najszybciej i najlepiej i wogóle naj prościej zliczyć te jedynki? ;)
 

trophy250

Nowicjusz
Dołączył
23 Listopad 2008
Posty
83
Punkty reakcji
0
czy sposób:
Kod:
jeźeli (slowo_bin==1)
{
licznik++;
}
będzie dobry? czy jest jakiś lepszy ?
 

Gressil

®
Administrator
Dołączył
17 Kwiecień 2009
Posty
6 075
Punkty reakcji
561
Myślę, że ten link okaże Ci się pomocny: klik
 

HrabiaVulpes

Nowicjusz
Dołączył
3 Kwiecień 2011
Posty
27
Punkty reakcji
2
Wiek
31
Miasto
Kraków
Jeśli umiesz przeliczać liczbę z systemu dziesiętnego na dwójkowy, to i z tym nie będziesz miał problemu.
Prosty kod:

Kod:
int liczba(int x)
{
int licznik_jedynek = 0;
while(x != 0)
{
  if (x%2 == 1)
  {
   licznik_jedynek++;
   x--;
  }
  x = x/2;
}
return licznik_jedynek;
}
Jak widzisz, zamiast zapisywać sobie zera i jedynki (by uzyskać liczbę binarnie) zwiększamy licznik zawsze, gdy w naszej liczbie pojawiłaby się jedynka. (pewnie zawile brzmi, nie potrafię dobrze wyjaśniać).
 
Do góry