📜  Objective-C类型转换

📅  最后修改于: 2020-11-03 15:58:49             🧑  作者: Mango


类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法。例如,如果要将长值存储为简单整数,则可以将强制类型转换为整数。您可以使用强制转换运算符将值从一种类型显式转换为另一种类型,如下所示:

(type_name) expression

在Objective-C中,我们通常使用CGFloat进行浮点运算,这是从float的基本类型派生的(如果是32位,则是double的),如果是64位,则是double的。考虑以下示例,其中强制转换运算符导致将一个整数变量除以另一个作为浮点运算来执行-

#import 

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

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

   return 0;
}

编译并执行上述代码后,将产生以下结果-

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

这里应该注意,强制转换运算符的优先级高于除法运算,因此sum的值首先转换为double类型,最后将其除以count得出double值。

类型转换可以是隐式的,其是由编译器自动地执行,或者它可以显式地通过使用转换运算符的指定。在需要类型转换时,使用强制转换运算符被认为是良好的编程习惯。

整数促销

整数提升是将整数类型“小于” intunsigned int的值转换为intunsigned int的过程。考虑在int中添加字符的示例-

#import 

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

编译并执行上述代码后,将产生以下结果-

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

此处,sum的值为116,因为编译器在执行实际加法运算之前正在进行整数提升并将’c’的值转换为ascii。

通常的算术转换

隐式执行通常的算术转换,以将其值转换为通用类型。编译器首先执行整数提升,如果操作数仍然具有不同的类型,则将它们转换为在以下层次结构中显示最高的类型-

通常的算术转换

通常不对赋值运算符执行逻辑运算,也不对逻辑运算符&&和||执行运算。让我们以以下示例来了解概念-

#import 

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

编译并执行上述代码后,将产生以下结果-

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

在这里,很容易理解,第一个c被转换为整数,但是由于最终值是浮点数,因此通常进行算术转换,并且编译器将i和c转换为浮点数并将它们相加以产生浮点结果。