08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

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

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

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

}<br />

return bit_array[x & 0xff] + bit_array[(x >> 8) & 0xff] +<br />

bit_array[(x >> 16) & 0xff] + bit_array[(x >>24) & 0xff];<br />

count1bits işlevi 32 bitlik bir tamsayının değeri 1 olan bitlerini sayıyor. İşlev bu işi<br />

yaparken 8 bitlik bir gruptaki 1 olan bitlerin sayısını bit_array dizisini kullanarak buluyor.<br />

Aşağıda tanımlanan gcd_b işleviyle, iki tamsayının ortak bölenlerinden en büyüğü<br />

hesaplanıyor. İşlevin tanımı içinde kalan işlecinin kullanılmadığına, bitsel işleçlerin<br />

kullanıldığına dikkat edin:<br />

unsigned int gcd_b(unsigned int x, unsigned int y)<br />

{<br />

unsigned int temp;<br />

unsigned int cpof = 0;<br />

if (x == 0)<br />

return y;<br />

if (y == 0)<br />

return x;<br />

while (((x | y) & 1) == 0) {<br />

x >>= 1;<br />

y >>= 1;<br />

++cpof;<br />

}<br />

while ((x & 1) == 0)<br />

x >>= 1;<br />

}<br />

while (y) {<br />

while (!(y & 1))<br />

y >>= 1;<br />

temp = y;<br />

if (x > y)<br />

y = x - y;<br />

else<br />

y -= x;<br />

x = temp;<br />

}<br />

return x

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

Saved successfully!

Ooh no, something went wrong!