sat3 Creative Commons License 2012.09.15 0 0 844

    int index=(y<<u2)+x;


        int index1=((y&(u-1))<<u2)+x;

 

 

Programozni nem tudóknak talán érdemes leírnom, miért írok ilyen  rusnya sorokat.

Az ok a gyorsítás. Igy gyorsabb az egész. A jelek mögöttes tartalma pedig egyszerű. A y<<u2 egyenértékű az y*256 utasítással.

Miért? Mert a léptetés egy helyiértékkel viszi arrébb a számot. Olyan ez, mikor mi a 100 után teszünk mégegy nullát. Tízzel szoroztunk.

Az eltérés annyi, hogy itt 2-es számredszerben kell gondolkodni olyan esetekben, amikor bitműveleteket végzünk.

A tízes helyiértékek balról jobbra sorba 1 10 100. ..., a kettesnél 1 2 4 8 16 32 64 128 256. Az 1-esből 256-lesz, ha 8-al balra toljuk el. A << ezt az irányt jelöli, Ellentétes irány esetén osztunk az adott lépéshez tartozó számmal. Ez a szám n=2^lépésszám.

 

Az y&(u-1) lekorlátozza az y számot 0 és u értéke közé akkor, ha az u kettő valamelyik hatványa.

A működési elve kissé nehezebben érthető a bitműveletek ismerete nélkül.

A programban az u=256. Ez binárisan 1 0000 0000. ha ebből levonok egyet, akkor lesz belőle 255, azaz 0 1111 1111. Az &-jel az AND bitműveletnek felel meg. Az akkor ad 1-es bitértéket, ha mindkét bemenet 1. Mivel csak az alső 8 bitje 1-es a maszknak(ami most az u-1) , ezért csak az alsó 8 bit fog megmaradni az y-ból.

 

 

Nem kell bitekben gondolkodni a programozás során. Hiszen az int index az végeredményben egy közönséges decimális szám számunkra. Egyszerűen írhatnám az, hogy int index=y*256 +x. csak az kissé lassabban futna le,

Vagy írhatnám az, hogy int index1=((y%u)*256)+x; ahol a %-jel az osztás maradékát adja. Az eredmény ugyan az.

 

De jó tudni, hogy az a gépben egy bináris szám, és kezelhetjük úgy is.

 

 

 

Előzmény: sat3 (842)