Amaç-C Tipi Döküm

Tür atama, bir değişkeni bir veri türünden başka bir veri türüne dönüştürmenin bir yoludur. Örneğin, uzun bir değeri basit bir tamsayı olarak saklamak istiyorsanız, cast long to int yazabilirsiniz. Değerleri bir türden diğerine açıkça şunu kullanarak dönüştürebilirsiniz:cast operator aşağıdaki gibi -

(type_name) expression

Objective-C'de, genellikle 32-bit olması durumunda temel float tipinden ve 64-bit olması durumunda double türünden türetilen kayan nokta işlemi yapmak için CGFloat kullanırız. Cast operatörünün, bir tamsayı değişkeninin diğerine bölünmesinin kayan nokta işlemi olarak gerçekleştirilmesine neden olduğu aşağıdaki örneği düşünün -

#import <Foundation/Foundation.h>

int main() {
   int sum = 17, count = 5;
   CGFloat mean;

   mean = (CGFloat) sum / count;
   NSLog(@"Value of mean : %f\n", mean );

   return 0;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

2013-09-11 01:35:40.047 demo[20634] Value of mean : 3.400000

Burada döküm operatörünün bölmeye göre önceliğe sahip olduğuna dikkat edilmelidir, bu nedenle değeri sum önce yazı tipine dönüştürülür double ve son olarak sayıya bölünerek çift değer elde edilir.

Tür dönüşümleri, derleyici tarafından otomatik olarak gerçekleştirilen örtük olabilir veya açıkça belirtilebilir. cast operator. Tür dönüşümleri gerekli olduğunda döküm operatörünün kullanılması iyi bir programlama uygulaması olarak kabul edilir.

Tamsayı Promosyonu

Tamsayı yükseltme, tam sayı türündeki değerlerin "daha küçük" değerlerinden int veya unsigned int ya dönüştürülür int veya unsigned int. Bir int'e karakter eklemenin bir örneğini düşünün -

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   int sum;

   sum = i + c;
   NSLog(@"Value of sum : %d\n", sum );

   return 0;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

2013-09-11 01:38:28.492 demo[980] Value of sum : 116

Burada toplamın değeri 116 olarak geliyor çünkü derleyici tamsayı ilerletme yapıyor ve gerçek toplama işlemini gerçekleştirmeden önce 'c' değerini ascii'ye dönüştürüyor.

Olağan Aritmetik Dönüşüm

usual arithmetic conversionsdeğerlerini ortak bir türe dönüştürmek için örtük olarak gerçekleştirilir. Derleyici önce tamsayı yükseltmeyi gerçekleştirir , işlenenler hala farklı türlere sahipse, aşağıdaki hiyerarşide en yüksek görünen türe dönüştürülürler -

Normal aritmetik dönüşümler, atama operatörleri veya && ve || mantıksal operatörleri için gerçekleştirilmez. Kavramı anlamak için aşağıdaki örneği ele alalım -

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   CGFloat sum;

   sum = i + c;
   NSLog(@"Value of sum : %f\n", sum );
   return 0;
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

2013-09-11 01:41:39.192 demo[15351] Value of sum : 116.000000

Burada, ilk c'nin tamsayıya dönüştürüldüğünü anlamak basittir, ancak son değer float olduğundan, normal aritmetik dönüşüm uygulanır ve derleyici, i ve c'yi float'a dönüştürür ve onları bir float sonucu verecek şekilde ekler.