Problem z zadaniem z matury, prośba o wytłumaczenie.

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; 
} 
1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1