może mi ktoś wytłumaczyć co robi ten kod?
#include <stdio.h>
int main()
{
int czas;
scanf("%d",&czas);
int wynik = 0;
while(czas>0)
{
if(czas&1)wynik++;
czas /= 2;
}
printf("%d\n",wynik);
return 0;
}
może mi ktoś wytłumaczyć co robi ten kod?
#include <stdio.h>
int main()
{
int czas;
scanf("%d",&czas);
int wynik = 0;
while(czas>0)
{
if(czas&1)wynik++;
czas /= 2;
}
printf("%d\n",wynik);
return 0;
}
Słowo klucz - operacje bitowe.
(czas&1)
wykonuje bitowy AND na ostatnim bicie (znaczy się na całej, ale w praktyce obchodzi Cię tylko ostatni) zmiennej czas i 1 - znaczy się jeśli ostatnia cyfra czas'u w zapisie dwójkowym jest jedynką instrukcja zwróci prawdę, jeśli nie - fałsz. W wyniku czego się licznik zwiększa.
czas /= 2;
poprzez dzielenie zmiennej na pół przesuwa dwójkową jej reprezentację w prawo, ucinając ostatni bit.
Poczytaj sobie o operacjach bitowych i o tym, jak się w różnych sytuacjach zmienia postać dwójkowa liczb.
PS: Formatuj kod, bo boli tak czytać.
http://pl.wikibooks.org/wiki/C/Operatory#Operacje_bitowe
http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php