Coulée de type Objective-C

La conversion de type est un moyen de convertir une variable d'un type de données à un autre type de données. Par exemple, si vous souhaitez stocker une valeur longue dans un entier simple, vous pouvez taper cast long en int. Vous pouvez convertir des valeurs d'un type à un autre explicitement en utilisant lecast operator comme suit -

(type_name) expression

En Objective-C, nous utilisons généralement CGFloat pour effectuer des opérations en virgule flottante, qui est dérivée du type de base de float dans le cas de 32 bits et double dans le cas de 64 bits. Prenons l'exemple suivant où l'opérateur de conversion entraîne la division d'une variable entière par une autre en tant qu'opération à virgule flottante -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Il convient de noter ici que l'opérateur de cast a la priorité sur la division, donc la valeur de sum est d'abord converti en type double et finalement il est divisé par nombre, ce qui donne une valeur double.

Les conversions de type peuvent être implicites, ce qui est effectué automatiquement par le compilateur ou elle peut être spécifiée explicitement via l'utilisation du cast operator. Il est considéré comme une bonne pratique de programmation d'utiliser l'opérateur de conversion chaque fois que des conversions de type sont nécessaires.

Promotion d'entiers

La promotion d'entiers est le processus par lequel les valeurs de type entier "plus petites" que int ou unsigned int sont convertis soit en int ou unsigned int. Prenons un exemple d'ajout d'un caractère dans un int -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Ici, la valeur de la somme devient 116 parce que le compilateur fait la promotion d'entiers et convertit la valeur de «c» en ascii avant d'effectuer l'opération d'addition réelle.

Conversion arithmétique habituelle

le usual arithmetic conversionssont implicitement exécutées pour convertir leurs valeurs dans un type commun. Le compilateur effectue d'abord la promotion d'entiers , si les opérandes ont encore des types différents, ils sont convertis au type qui apparaît le plus haut dans la hiérarchie suivante -

Les conversions arithmétiques habituelles ne sont pas effectuées pour les opérateurs d'affectation, ni pour les opérateurs logiques && et ||. Prenons l'exemple suivant pour comprendre le concept -

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

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

Ici, il est simple de comprendre que le premier c est converti en entier, mais comme la valeur finale est float, la conversion arithmétique habituelle s'applique et le compilateur convertit i et c en float et les ajoute pour obtenir un résultat float.