System binarny - wyświetl liczbe jedynek

0
#include <cstdio>
#include <cstdlib>

int main(){
    int czas;
    scanf("%d",&czas);
    int wynik=0;
    while(czas>0){
    if(czas&1)wynik++;
    czas/=2;
    }
    printf("%d\n",wynik);
    system("PAUSE");
    return 0;
}

Proszę o pomoc w wytłumaczeniu tego kodu, program ma pobierać jakąś liczbę, a następnie wyświetlić ile jest jedynek w tej liczbie po zamianie na syst. bin. Nie kumam za bardzo tych różnych operatorów i instrukcji warunkowej if. Dodam że po skompilowaniu wszystko jest ok.

0

W ten szczególny dzień pozwolę Ci nie myśleć :)

#include <stdio.h>

int main()
{
    int n, s = 0;//deklaracja zmiennych  n - podana liczba, s liczba jedynek;

    printf("Podaj liczbe: ");
    scanf("%d", &n);//wczytywanie liczby

    while(n != 0)//pętla wykonująca się do momentu gdy n nie ma wartości 0
    {
            if(n % 2 == 1)//Jeżeli reszta z dzielenia przez 2 to jeden:
                s += 1;//do zmiennej suma dodajemy 1;

            n /= 2;//od n odejmujemy n/2
    }

    printf("Liczba jedynek po zamianie na system binarny to: %d", s);

    return 0;
}
0

Problem z zadaniem z matury, prośba o wytłumaczenie.
Było...
Żebyś się nie męczył klikaniem:

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

0

a /= 2 to nie to samo co a >>= 1
a czemu? no właśnie

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