C'de Tip Dökümü: Tip Dönüşümü, Örtülü, Örnekle Açık
C'de Typecasting Nedir?
Typecasting, bir veri tipini diğerine dönüştürmektir. C dilinde veri dönüşümü veya tip dönüşümü olarak da adlandırılmaktadır. 'C' programlamasında tanıtılan önemli kavramlardan biridir.
'C' programlama iki tür tip döküm işlemi sağlar:
- Örtülü tip döküm
- Açık tip döküm
Örtülü tip döküm
Örtülü tip dökümü, veri tiplerinin orijinal anlamını kaybetmeden dönüştürülmesi anlamına gelir. Veri türlerini değiştirmek istediğinizde bu tür yazım çok önemlidir olmadan içinde saklanan değerlerin öneminin değiştirilmesi değişken.
C'de örtük tip dönüşümü, bir değer uyumlu veri tipine kopyalandığında otomatik olarak gerçekleşir. Dönüşüm sırasında, tip dönüşümü için katı kurallar uygulanır. İşlenenler iki farklı veri tipindeyse, daha düşük veri tipine sahip bir işlenen otomatik olarak daha yüksek veri tipine dönüştürülür. Bu tip dönüşüm aşağıdaki örnekte görülebilir.
#include<stdio.h> int main(){ short a=10; //initializing variable of short data type int b; //declaring int variable b=a; //implicit type casting printf("%d\n",a); printf("%d\n",b); }
Çıktı:
10 10
- Verilen örnekte, değeri 10 olarak başlatılan kısa veri tipinde bir değişken tanımladık.
- İkinci satırda int veri tipinde bir değişken tanımladık.
- Üçüncü satırda s değişkeninin değerini a değişkenine atadık. Üçüncü satırda, kısa veri tipindeki s değişkenindeki değerin int veri tipindeki a değişkenine kopyalanmasıyla örtülü tip dönüşümü gerçekleştirilir.
Karakteri Int'ye Dönüştürme
ASCII'de kodu çözülmüş bir karakterin bir tam sayıyla eklenmesi örneğini düşünün:
#include <stdio.h> main() { int number = 1; char character = 'k'; /*ASCII value is 107 */ int sum; sum = number + character; printf("Value of sum : %d\n", sum ); }
Çıktı:
Value of sum : 108
Burada derleyici, gerçek toplama işlemini gerçekleştirmeden önce 'k' değerini ASCII'ye dönüştürerek bir tamsayı yükseltmesi yapmıştır.
Aritmetik Dönüşüm Hiyerarşisi
Derleyici önce bir karakteri tam sayıya yükseltmeye devam eder. İşlenenler hala farklı veri türlerine sahipse, aşağıdaki hiyerarşi çizelgesinde görünen en yüksek veri türüne dönüştürülürler:
Kavramı anlamak için aşağıdaki örneği ele alalım:
#include <stdio.h> main() { int num = 13; char c = 'k'; /* ASCII value is 107 */ float sum; sum = num + c; printf("sum = %f\n", sum );}
Çıktı:
sum = 120.000000
Her şeyden önce, c değişkeni tamsayıya dönüştürülür, ancak derleyici bunu dönüştürür. num ve c "float" içine alır ve bunları bir 'float' sonucu elde etmek için ekler.
Örtülü Dönüşümlerle İlgili Önemli Noktalar
- Örtük tür dönüşümüne standart tür dönüşümü de denir. Örtülü tip atamada herhangi bir anahtar kelimeye veya özel ifadeye ihtiyacımız yoktur.
- Daha küçük veri türünden daha büyük veri türüne dönüştürme işlemine de denir. tür tanıtımıYukarıdaki örnekte s değerinin integer türüne yükseltildiğini de söyleyebiliriz.
- Örtülü tür dönüşümü her zaman uyumlu veri türleriyle gerçekleşir.
Aşağıdaki gibi birbiriyle uyumlu olmayan veri türleri üzerinde örtülü tür dönüşümü gerçekleştiremeyiz:
- Float'ı int'ye dönüştürmek kesir kısmını kesecek ve dolayısıyla değerin anlamını kaybedecektir.
- Double'ı float'a çevirmek rakamları yuvarlayacaktır.
- Long int'yi int'ye dönüştürmek, aşırı yüksek dereceli bitlerin düşmesine neden olacaktır.
Yukarıdaki durumların hepsinde veri türlerini dönüştürdüğümüzde değer anlamını yitirecektir. Genellikle değerin anlam kaybı derleyici tarafından uyarılır.
'C' programlama açık tip dökümü olan başka bir tip dökümü yöntemi sağlar.
Açık tip döküm
Örtük tür dönüşümünde veri türü otomatik olarak dönüştürülür. Tür dönüştürmeyi zorlamamız gerekebilecek bazı senaryolar vardır. Bir int veri türü olarak bildirilen iki işlenenin bölümünü saklayan bir div değişkenimiz olduğunu varsayalım.
int result, var1=10, var2=3; result=var1/var2;
Bu durumda var1 ve var2 değişkenleri üzerinde yapılan bölme işleminden sonra “result” değişkeninde saklanan sonuç tamsayı formatında olacaktır. Böyle bir durumda “sonuç” değişkeninde saklanan değer, normalde iki sayının bölünmesinde elde edilen kesir kısmını dikkate almadığı için anlamını yitirir.
Bu gibi durumlarda tür dönüşümünü zorlamak için açık tür dönüşümü kullanırız.
Bir tip döküm operatörü gerektirir. Tip döküm işlemlerinin genel sözdizimi aşağıdaki gibidir:
(type-name) expression
Burada,
- Tür adı standart 'C' dili veri türüdür.
- Bir ifade bir sabit, bir değişken veya gerçek bir ifade olabilir.
Açık tip dönüşümü ile C'de nasıl typecast yapılacağını gösteren bir program yazalım.
#include<stdio.h> int main() { float a = 1.2; //int b = a; //Compiler will throw an error for this int b = (int)a + 1; printf("Value of a is %f\n", a); printf("Value of b is %d\n",b); return 0; }
Çıktı:
Value of a is 1.200000 Value of b is 2
- Float tipinde 'a' değişkenini başlattık.
- Daha sonra, tamsayı veri türünde başka bir 'b' değişkenimiz var. 'a' ve 'b' değişkenleri farklı veri tiplerinde olduğundan 'C' böyle bir ifadenin kullanılmasına izin vermeyecek ve hata oluşturacaktır. 'C'nin bazı versiyonlarında ifade değerlendirilecek ancak sonuç istenmeyecektir.
- Bu gibi durumlardan kaçınmak için, float tipindeki 'a' değişkenini türettik. Açık tür dönüştürme yöntemlerini kullanarak, kayan noktayı başarıyla veri türü tamsayıya dönüştürdük.
- Hala kayan nokta olan 'a'nın değerini yazdırdık
- Tiplemeden sonra sonuç her zaman bir 'b' tamsayısı olacaktır.
Bu şekilde C programlamada açık tip dökümü uygulayabiliriz.
ÖZET
- Typecasting aynı zamanda tip dönüşümü olarak da adlandırılır.
- Bir veri tipini diğerine dönüştürmek anlamına gelir.
- Daha küçük veri tipini daha büyük veri tipine dönüştürme işlemine de tip yükseltme denir.
- İki tür tür dönüşümü vardır: C'de örtülü ve açık tür dönüşümü.
- Örtülü tür dönüştürme, uyumlu veri türü bulunduğunda otomatik olarak çalışır.
- Açık tür dönüştürme, bir tür dönüştürme operatörü gerektirir.
Farklı veri tipleriyle çalışırken veri kaybını önlemek için programlama pratiğinde aşağıdaki kuralları aklınızda bulundurun:
- Tamsayı türleri float'a dönüştürülmelidir.
- Float tipleri double'a çevrilmelidir.
- Karakter türleri tamsayıya dönüştürülmelidir.