Aha. Zkus si polozit otazku, jak zjistis jednotlive bity?
'deleni modulo %' je jen alternativni operace k 'and &'.
'floor + podminka' je jen alternativni operace k 'modulo'.
'nasobeni x*2' je podobna operace k shiftovani doleva x<<1
'deleni floor(x/2)' je podobna operace k shiftovani doprava x>>1
5 / 2 = 2.5
floor (5 / 2) = floor (2.5) = 2 ... orezani desetinne casti
5 % 2 = 1 ... 5 / 2 = 2 zbytek 1 ... matematika modulo, zbytek po celociselnem deleni
5 >> 0 = (bin) 0101>>0 = (bin) 0101 = (dec) 5 ... cislo nijak nezmeni, ale presto je to platna operace
5 >> 1 = (bin) 0101>>1 = (bin) .010 = (dec) 2 ... smaze posledni 1 bit ... cili to same jako floor (5 / 2)
5 >> 2 = (bin) 0101>>2 = (bin) ...01 = (dec) 1 ... smaze posledni 2 bity
5 >> 3 = (bin) 0101>>3 = (bin) ....0 = (dec) 0 ... smaze posledni 3 bity
5 & 1 = (bin) 0101 & 0001 = (bin) 0001 = (dec) 1
(5 >> 0) & 1 = (bin) (0101 >> 0) & 0001 = (bin) 0101 & 0001 = 0001
(5 >> 1) & 1 = (bin) (0101 >> 1) & 0001 = (bin) 0010 & 0001 = 0000
(5 >> 2) & 1 = (bin) (0101 >> 2) & 0001 = (bin) 0001 & 0001 = 0001
(5 >> 3) & 1 = (bin) (0101 >> 3) & 0001 = (bin) 0000 & 0001 = 0000
... dal uz jsou jen nuly
A kdyz sectes vysledek, ziskas pocet jednicek.
A samozrejme misto shiftu muses modulo % nebo floor+podminku.