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 />

Atama işlecinin sağ terimi, bir gerçek sayı türünden ise(float, double, long double) ve sol<br />

terimi tam sayı türünden ise önce gerçek sayı değerinin ondalık kısmı kaybedilir. Eğer<br />

gerçek sayıdan elde edilen tamsayı kısmı, atamanın yapıldığı tamsayı türünden ifade<br />

edilemiyorsa, bu durum tanımsız davranıştır (undefined behaviour). Bu durumun<br />

oluştuğu kodlardan kesinlikle kaçınmak gerekir. Ama derleyicilerin hemen hepsi, bu<br />

durumda aşağıdaki şekilde tür dönüşümü yapar:<br />

Atama işlecinin sağ terimi olan gerçek sayı bir ondalık kısım içeriyorsa, önce ondalık kısmı<br />

kaybedilir. Ondalık kısmı kaybedildikten sonra kalan tamsayı değer, eğer sol terimin<br />

türünün sınırları içinde kalıyorsa daha fazla bir bilgi kaybı olmaz, fakat sol taraf türünün<br />

sınırları aşılıyorsa fazladan bir bilgi kaybı daha olur ve bu kez yüksek anlamlı byte'lar<br />

kaybedilir. Örnek:<br />

#include <br />

int main()<br />

{<br />

double y = 234.12;<br />

int x;<br />

x = y;<br />

printf("x = %d\n", x); /* x değişkenine 234 değeri atanır*/<br />

y = 7689523345.347;<br />

x = y; /* Yanlış */<br />

printf("x = %d\n", x);<br />

}<br />

return 0;<br />

Şimdi de aşağıdaki programı derleyerek çalıştırın:<br />

#include <br />

int main()<br />

{<br />

char ch;<br />

ch = 135;<br />

if (ch == 135)<br />

printf("dogru!\n");<br />

else<br />

printf("yanlış!\n");<br />

}<br />

return 0;<br />

Program çalıştırıldığında ekrana neden "yanlış" yazısı yazdırılıyor?<br />

ch değişkenine 135 değeri atanıyor:<br />

ch = 135;<br />

Bu durumda yüksek anlamlı byte kaybedileceğinden ch değişkenine atanan değer<br />

1000 0111<br />

değeri olur.<br />

131/529

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

Saved successfully!

Ooh no, something went wrong!