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

TÜR DÖNÜŞÜMLERİ<br />

Bilgisayarların aritmetik işlemleri gerçekleştirmesinde bir takım kısıtlamalar söz<br />

konusudur. Bilgisayarların aritmetik bir işlemi gerçekleştirmesi için genellikle işleme<br />

sokulan terimlerin uzunluklarının aynı olması, yani bit sayılarının aynı olması ve bellekte<br />

aynı formatta ifade edilmeleri gerekir. Örneğin işlemci 16 bit uzunluğunda iki tam sayıyı<br />

doğrudan toplayabilir ama 16 bit uzunluğunda bir tam sayı ile 32 bit uzunluğundaki bir<br />

gerçek sayıyı doğrudan toplayamaz.<br />

C programlama dili, değişik türlerin aynı ifade içinde bulunmalarına izin verir. Yani tek bir<br />

ifadede bir tamsayı türünden değişken, float türden bir değişmez ya da char türden bir<br />

değişken birlikte yer alabilir. Bu durumda C derleyicisi, bunları herhangi bir işleme<br />

sokmadan önce, bilgisayar donanımının ifadeyi değerlendirebilmesi için uygun tür<br />

dönüşümlerini yapar.<br />

Örneğin 16 bitlik int türden bir değerle 64 bitlik double türden bir değer toplandığında,<br />

önce 16 bitlik int türden değer, 64 bit uzunluğunda double türden bir değer olarak ifade<br />

edilir, daha sonra toplama işlemi gerçekleştirilir. Yine 16 bitlik bir int türden bir değerle<br />

64 bitlik bir double türden bir değer çarpıldığında derleyici, önce int türden değeri 64<br />

bitlik double türden bir değere dönüştürür. Bu tür dönüşümü daha karmaşıktır, çünkü int<br />

ve double türden değerler bellekte farklı biçimlerde tutulur.<br />

Bu tür dönüşümler, programcının bir kod yazmasına gerek duyulmaksızın otomatik olarak<br />

gerçekleştirilir. Böyle dönüşümlere, otomatik tür dönüşümleri (implicit type conversions)<br />

diyeceğiz. Diğer taraftan C dili, programcıya herhangi bir ifadeyi, bir işleç kullanarak<br />

başka bir türden ele alma olanağı da verir. Programcı tarafından yapılan böyle tür<br />

dönüşümlerine bilinçli tür dönüşümleri (explicit type conversions/type casts) diyeceğiz.<br />

Önce otomatik tür dönüşümlerini inceleyelim. Otomatik tür dönüşümleri ne yazık ki<br />

karmaşık yapıdadır ve iyi öğrenilmemesi durumunda programlarda hatalar kaçınılmazdır.<br />

C'de 11 ayrı doğal veri türü olduğunu biliyorsunuz. Herhangi bir hataya neden olmamak<br />

için bunların her türlü ikili bileşimi için nasıl bir otomatik tür dönüşümü yapılacağını çok<br />

iyi bilmek gerekir.<br />

Hangi Durumlarda Tür Dönüşümü Yapılır<br />

Aşağıda belirtilen dört durumda mutlaka otomatik bir tür dönüşümü yapılır:<br />

1. Aritmetik ya da mantıksal bir ifadenin terimleri aynı türden değilse:<br />

Böyle yapılan tür dönüşümlerine işlem öncesi tür dönüşümleri diyeceğiz.<br />

2. Atama işleci kullanıldığında atama işlecinin sağ tarafındaki ifadenin türü ile sol<br />

tarafındaki ifadenin türü aynı değilse:<br />

double toplam;<br />

long sayi1, sayi2;<br />

/***/<br />

toplam = sayi1 + sayi2;<br />

Bu durumda yapılan tür dönüşümlerine atama tür dönüşümleri diyeceğiz.<br />

3. Bir işlev çağrısında işleve gönderilen bir argümanın türü ile işlevin ilgili parametre<br />

değişkeninin türü aynı değilse:<br />

double sqrt (double val);<br />

void func()<br />

{<br />

int number;<br />

double result = sqrt(number);<br />

/***/<br />

}<br />

127/529

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

Saved successfully!

Ooh no, something went wrong!