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

türüne dönüştürülür. Yapılan bu dönüşüme "tam sayıya yükseltme" (integral promotion)<br />

denir.<br />

Daha sonra aşağıdaki kurallar uygulanır:<br />

Terimlerden birinin unsigned long türünden, diğerinin farklı bir türden olması durumunda<br />

diğer terim unsigned long türünde ifade edilir ve işlem unsigned long türünde yapılır.<br />

Terimlerden birinin signed long türünden, diğerinin farklı bir türden olması durumunda<br />

diğer terim signed long türünde ifade edilir ve işlem signed long türünde yapılır.<br />

Terimlerden birinin unsigned int türünden, diğerinin farklı bir türden olması durumunda<br />

diğer terim unsigned int türünde ifade edilir ve işlem unsigned int türünde yapılır.<br />

İstisnalar:<br />

Eğer terimlerden biri signed long int diğeri unsigned int türünden ise ve kullanılan<br />

sistemde bu türlerin uzunlukları aynı ise (UNIX ve Win 32 sistemlerinde olduğu gibi) her<br />

iki terim de unsigned long int türüne dönüştürülür.<br />

Eğer terimlerden biri signed int diğeri unsigned short int türünden ise ve kullanılan<br />

sistemde bu türlerin uzunlukları aynı ise (DOS işletim sisteminde olduğu gibi) her iki<br />

terim de unsigned int türüne dönüştürülür.<br />

İşaretli bir tamsayı türünden işaretsiz tamsayı türüne dönüşüm yapılması durumunda<br />

dikkatli olunmalıdır:<br />

#include <br />

int main()<br />

{<br />

int x = -2;<br />

unsigned int y = 1;<br />

if (y > x)<br />

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

else<br />

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

}<br />

return 0;<br />

Yukarıdaki programın çalışmasıyla ekrana "yanlış" yazısı yazdırılır.<br />

y > x<br />

ifadesinde '>' işlecinin sol terimi unsigned int türünden iken sağ terimi int türdendir. Bu<br />

durumda yapılacak otomatik tür dönüştürme işlemi sonucunda int türden olan terim,<br />

işlem öncesinde unsigned int türünde ifade edilir. -2 değeri unsigned int türünde ifade<br />

edildiğinde artık negatif bir değer olmayıp büyük bir pozitif sayı olur. Örneğin 2 byte' lık<br />

int türü söz konusu olduğunda bu değer 65534'tür. Dolayısıyla y > x ifadesi yanlış olarak<br />

yorumlanır. Çünkü otomatik tür dönüşümünden sonra y > x ifadesi artık yanlıştır.<br />

İşlev çağrı ifadeleri de, işleçlerle birlikte başka ifadeleri oluşturuyorsa, otomatik tür<br />

dönüşümlerine neden olabilir. Zira geri dönüş değerine sahip olan işlevler için işleve<br />

yapılan çağrı ifadesi, işlevin geri dönüş değerine karşılık gelir. Örneğin:<br />

int i = 5;<br />

...<br />

pow(2, 3) + i<br />

129/529

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

Saved successfully!

Ooh no, something went wrong!