08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

char ya da short türünden olan argümanlar tamsayıya yükseltilir (integral promotion).<br />

float türünden olan argümanlar double türüne dönüştürülür. Bunun dışındaki türlerden<br />

olan argümanlar için tür dönüşümü yapılmaz.<br />

Tür Dönüştürme İşleci<br />

Tür dönüştürme işleci (typecast operator) ile bir ifade bir işleme sokulmadan önce başka<br />

bir türden ifade edilebilir. Tür dönüştürme işleci, önek konumunda bulunan tek terimli bir<br />

işleçtir.<br />

İşleç, bir ayraç ve ayraç içine yazılan bir tür bilgisinden oluşur:<br />

(double)x<br />

İşlecin ürettiği değer, terimi olan ifadenin ayraç içindeki türden ifade edilmiş değeridir.<br />

Tür dönüştürme işleci de, diğer tüm tek terimli işleçler gibi, işleç öncelik tablosunun ikinci<br />

öncelik seviyesinde bulunur.<br />

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

#include <br />

int main()<br />

{<br />

int x = 10;<br />

int y = 4;<br />

double z;<br />

z = (double)x / y;<br />

printf("z = %lf\n", z);<br />

}<br />

return 0;<br />

Yukarıdaki programda<br />

z = (double)x / y<br />

ifadesinde önce tür dönüştürme işleci değer üretir. Tür dönüştürme işlecinin ürettiği<br />

değer, x nesnesinin double türde ifade edilmiş değeridir. Bu durumda bölme işlecine sıra<br />

geldiğinde bölme işlecinin terimi double türden 10 değeri olur. Bu kez de otomatik tür<br />

dönüşümü ile bölme işlecinin sağ terimi double türüne dönüştürülerek bölme işlemi<br />

double türünde yapılır. Bu durumda bölme işleci 2.5 değerini üretir.<br />

Şüphesiz ifade aşağıdaki biçimde yazılsaydı yine bilgi kaybı oluşmazdı:<br />

z = x /(double)y<br />

Ancak ifade aşağıdaki gibi yazılsaydı:<br />

z = (double) (x / y)<br />

bu durumda tür dönüştürme işlecinin terimi (x / y) ifadesi olurdu. Bu da bilgi kaybını<br />

engellemezdi.<br />

Bir verinin istenerek kaybedilmesi durumunda okunabilirlik açısından, otomatik tür<br />

dönüşümü yerine, tür dönüştürme işleci ile bilinçli bir dönüşüm yapılmalıdır.<br />

int i;<br />

double d;<br />

/***/<br />

i = d;<br />

134/529

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

Saved successfully!

Ooh no, something went wrong!