May 072013
 

Prethodni primer ne možemo da optimizujemo analogno onome kao što smo uradili sa primerom 14 u primeru 15, tj. ne možemo sabiranje sa samim sobom da zamenimo oduzimanjem jer bi rezultat odmah bio nula. Medjutim, ipak možemo da izbegnemo deljenje i dobijemo kraći program upotrebom jedne operacije koja se zove pomeranje, odn. šiftovanje.

Tutor17.bas

U ovom primeru vidimo da je linija “latb=latb / 2” zamenjena sa “latb=latb >> 1”. Dva znaka “veće” (>>) predstavljaju operator pomeranja udesno, a broj iza označava za koliko bitova se vrši pomeranje. Analogno tome, dva znaka “manje” (<<) predstavljaju pomeranje ulevo, a iza se takodje navodi broj bitova. Upotrebom ovog operatora umesto deljenja uštedeli smo 17 vorda programske memorije.

Ovaj operator vrši pomeranje bitova za onoliko mesta za koliko je navedeno pri čemu se gube bitovi koji “izlaze”, a na mesto novih se ubacuju nule. Da bi bilo jasnije, pogledajmo primer ako u promenljivoj X tipa bajt imamo broj 100, tj. binarno 01100100:

X=%01100100

Y=X << 1       ; Y=%11001000
Y=X << 2       ; Y=%10010000
Y=X << 3       ; Y=%00100000

Y=X >> 1       ; Y=%00110010
Y=X >> 2       ; Y=%00011001
Y=X >> 3       ; Y=%00001100

Na ovaj način ujedno ostvarujemo brzo množenje ili deljenje brojem koji je stepen broja 2, tj. brojevima 2, 4, 8, 16 itd. Pomeranje udesno je deljenje, dok je pomeranje ulevo množenje. Naravno, pri tome morate da pazite na bitove koji “izlaze” iz promenljive jer možete da dobijete pogrešan rezultat.

Veličina iskompajliranog programa: 81 Word-a