C TypeCasting: Örtülü, Örneklerle Açık

İçindekiler:

Anonim

C'de Tip Döküm nedir?

Typecasting, bir veri türünü diğerine dönüştürmektir. Veri dönüştürme veya tür dönüştürme olarak da adlandırılır. 'C' programlamada tanıtılan önemli kavramlardan biridir.

'C' programlama iki tür tip döküm işlemi sağlar:

  1. Örtülü tür çevrim
  2. Açık tip çevrim

Örtülü tür çevrim

Örtülü tür çevrim, orijinal anlamını kaybetmeden veri türlerinin dönüştürülmesi anlamına gelir. Eğer veri türlerini değiştirmek istediğinizde tiplemeleri Bu tip esastır olmadan değişkeni içinde saklanan değerlerin önemini değişen.

Örtük tür dönüştürme, bir değer uyumlu veri türüne kopyalandığında otomatik olarak gerçekleşir. Dönüştürme sırasında tür dönüştürme için katı kurallar uygulanır. İşlenenler iki farklı veri türündeyse, daha düşük veri türüne sahip bir işlenen otomatik olarak daha yüksek bir veri türüne dönüştürülür. Bu tür bir tür dönüştürme aşağıdaki örnekte görülebilir.

#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);} 

Çıktı

1010

  1. Verilen örnekte, değeri 10 olarak başlatılan kısa veri türünde bir değişken tanımladık.
  2. İkinci satırda, int veri türünde bir değişken tanımladık.
  3. Üçüncü satırda, s değişkeninin değerini a değişkenine atadık. Üçüncü satırda örtük tür dönüşümü, kısa veri türündeki s değişkeninin değeri, int veri türündeki a değişkenine kopyalanarak gerçekleştirilir.

Karakteri Int'e Dönüştürme

ASCII'de tamsayı ile kodu çözülmüş bir karakter ekleme örneğini düşünün:

#include 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 grafiğinde 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 düşünün:

#include 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 tam sayıya dönüştürülür, ancak derleyici num ve c'yi "float" değerine dönüştürür ve bir "float" sonucu üretmek için bunları ekler.

Örtülü Dönüşümlerle İlgili Önemli Noktalar

  • Örtük tür dönüştürme, standart tür dönüştürme olarak da adlandırılır. Örtük tip çevriminde 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, tür yükseltmesi olarak da adlandırılır . Yukarıdaki örnekte, s'nin değerinin tamsayı tipine yükseltildiğini de söyleyebiliriz.
  • Örtük 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ük tür çevirimi gerçekleştiremeyiz:

  1. Float işlevini int türüne dönüştürmek, kesir bölümünü kesecek ve dolayısıyla değerin anlamını yitirecektir.
  2. Double türünün float türüne dönüştürülmesi rakamları yuvarlayacaktır.
  3. Long int'i int'e dönüştürmek, fazla yüksek dereceli bitlerin düşmesine neden olur.

Yukarıdaki tüm durumlarda, 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 çevrim olan başka bir tipleme yöntemi sağlar.

Açık tip çevrim

Örtük tür dönüştürmede, veri türü otomatik olarak dönüştürülür. Tür dönüştürmeye zorlamamız gereken bazı senaryolar vardır. Bir int veri türü olarak bildirilen iki işlenenin bölünmesini depolayan 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 gerçekleştirilen bölmeden sonra, "sonuç" değişkeninde saklanan sonuç tamsayı formatında olacaktır. Bu ne zaman olursa, "sonuç" değişkeninde saklanan değer anlamını yitirir çünkü normalde iki sayının bölünmesiyle elde edilen kesir bölümünü dikkate almaz.

Bu tür durumlarda tip dönüşümünü zorlamak için, açık tip çevrim kullanıyoruz.

Bir tip döküm operatörü gerektirir. Tür atama işlemleri için genel sözdizimi aşağıdaki gibidir:

(type-name) expression

Buraya,

  • Tür adı, standart 'C' dili veri türüdür.
  • Bir ifade sabit, değişken veya gerçek bir ifade olabilir.

'C' de açık tip çevriminin uygulanmasını gösteren bir program yazalım.

#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint 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.200000Value of b is 2

  1. Float türünde bir 'a' değişkenini başlattık.
  2. Daha sonra, tamsayı veri türünden başka bir değişken 'b' var. 'A' ve 'b' değişkeni farklı veri türlerinde olduğundan, 'C' böyle bir ifadenin kullanımına izin vermez ve bir hata ortaya çıkarır. 'C'nin bazı versiyonlarında, ifade değerlendirilecek, ancak sonuç istenmeyecektir.
  3. Bu tür durumlardan kaçınmak için float türünün 'a' değişkenini yazdık. Açık tip çevrim yöntemlerini kullanarak, float'ı başarıyla veri tipi tamsayıya dönüştürdük.
  4. Hala bir kayan nokta olan 'a' değerini yazdırdık
  5. Tipik dökümden sonra, sonuç her zaman bir 'b' tamsayısı olacaktır.

Bu şekilde, 'C' programlamada açık tip çevrim gerçekleştirebiliriz.

Özet

  • Typecasting, tip dönüşümü olarak da adlandırılır
  • Bir veri türünü diğerine dönüştürmek anlamına gelir.
  • Daha küçük veri türlerini daha büyük bir veri türüne dönüştürmek, tür promosyonu olarak da adlandırılır.
  • 'C' örtük ve açık bir tür dönüştürme yöntemi sağlar.
  • Örtük 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 atama operatörü gerektirir.

Veri kaybını önlemek için farklı veri türleriyle uğraşırken programlama uygulaması için aşağıdaki kuralları aklınızda bulundurun:

  • Tamsayı türleri float türüne dönüştürülmelidir.
  • Float türleri double türüne dönüştürülmelidir.
  • Karakter türleri tam sayıya dönüştürülmelidir.