12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

228 POGLAVLJE 14. OPERACIJE NAD BITOVIMALogičko ILI:a = 0100 0111 0101 0111b = 1101 0100 1010 1001a | b = 1101 0111 1111 1111Ekskluzivno logičko ILI:a = 0100 0111 0101 0111b = 1101 0100 1010 1001a ^ b = 1001 0011 1111 1110Logički operatori najčešće služe maskiranju pojedinih bitova u operandu.Maskiranje je transformacija binarnog zapisa u varijabli na odreden način.Na primjer, pretpostavimo da želimo šest najmanje značajnih bitova iz varijablea kopirati u varijablu b, a sve ostale bitove varijable b staviti na nulu.To možemo postići pomoću logičkog I operatora. Pretpostavimo da su varijabletipa int i da je int kodiran u 16 bitova. Tada prvo definiramo masku,konstantu koja ima sljedeći raspored bitova:mask = 0000 0000 0011 1111Odmah se vidi da je mask=0x3f. Operacija koju trebamo napraviti jea = 0100 0111 0101 0111mask = 0000 0000 0011 1111a & mask = 0000 0000 0001 0111i stoga imamo b=a & 0x3f. Uočimo da je maska neovisna o broju bitovakoji se koristi za tip int. Naravno, da smo htjeli izdvojiti dio najznačjnijihbitova (lijevo pozicioniranih) morali bismo precizno znati duljinu tipa int.Da bismo izdvojili najznačajnijih šest bitova, a ostale postavili na nulu moralibismo izvršiti operaciju b=a & 0xfc00 (provjerite), ali taj način je zavisan oširini tipa int.Logičko I takoder služi postavljanjem na nulu odredenih bitova. Akou nekoj varijabli a želimo postaviti na nulu neki bit, dovoljno je napravitilogičko I s konstantom koja na traženom mjestu ima nulu, a na svim ostalimjedinice. Na primjer,a = 0100 0111 0101 0111mask = 1111 1101 1111 1111a & mask = 0100 0101 0101 0111Ovdje smo deseti bit postavili na nulu.Logičko ILI na sličan način može poslužiti maskiranju bitova. Njega ćemoiskoristiti kada želimo iz jedne varijable u drugu kopirati dio bitova, a sveostale postaviti na jedan. Na primjer, ako želimo izdvojiti šest najmanjeznačajnih bitova trebamo napravitia = 0100 0111 0101 0111mask = 1111 1111 1100 0000a | mask = 1111 1111 1101 0111

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!