Mislim da treba pisati x&1 a ne x&2, te isto tako x>>=1 umjesto x>>=2?
x&1 je isto kao i x%2: napravi se booleovski and nad bitovima od x i 0000..0001, pa je to zapravo 1 ako je x neparan, a 0 ako je paran, tj. 1 ako je zadnji bit od x jednak 1, a 0 ako nije.
x>>=1 je 1337 :) nacin da se napise x=x/2; rijec je o operatoru koji sve bitove od x "gurne" udesno, efekt je isti kao da se x cjelobrojno podijeli sa 2.
Npr. za x=5(dec)=000...000101(bin) je x>>1=000...000010(bin)=2(dec) ("gurnuli" smo sve bitove udesno, zadnja jedinica se izgubi).
Slicno x>>=2 sve bitove od x "gurne" za 2 mjesta udesno itd.
if (znam[br_znam++]=x&1) b++; se moze raspisati kao
[code:1]znam[br_znam]=x%2; // dakle znam[br_znam]=zadnja bin. znamenka od x
if (znam[br_znam]==1) b++;
br_znam++;
[/code:1]
Kad se to "uvrstis" u gornji kod, mislim da ce ti biti jasno kako radi :)
Mislim da treba pisati x&1 a ne x&2, te isto tako x>>=1 umjesto x>>=2?
x&1 je isto kao i x%2: napravi se booleovski and nad bitovima od x i 0000..0001, pa je to zapravo 1 ako je x neparan, a 0 ako je paran, tj. 1 ako je zadnji bit od x jednak 1, a 0 ako nije.
x>>=1 je 1337 nacin da se napise x=x/2; rijec je o operatoru koji sve bitove od x "gurne" udesno, efekt je isti kao da se x cjelobrojno podijeli sa 2.
Npr. za x=5(dec)=000...000101(bin) je x>>1=000...000010(bin)=2(dec) ("gurnuli" smo sve bitove udesno, zadnja jedinica se izgubi).
Slicno x>>=2 sve bitove od x "gurne" za 2 mjesta udesno itd.
if (znam[br_znam++]=x&1) b++; se moze raspisati kao
Kod: | znam[br_znam]=x%2; // dakle znam[br_znam]=zadnja bin. znamenka od x
if (znam[br_znam]==1) b++;
br_znam++;
|
Kad se to "uvrstis" u gornji kod, mislim da ce ti biti jasno kako radi
|