zoukankan      html  css  js  c++  java
  • Objective-C中的类型转换

    转自:http://blog.csdn.net/lonelyroamer/article/details/7711920

    类型转换

    表2-3列出了简单数据类型、示例和格式符。

    表2-3 简单数据类型、示例和格式符

     

    不同数据类型的数据是可以转换成同一种数据类型,然后进行计算。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的数据混合运算时,由系统自动完成。Objective-C 编译器会遵循一些非常严格的规则,编译器按照下面的顺序转换不同类型的操作数。

    ①如果其中一个数是long double类型的,那么另一个操作数被转换为long double类型,计算的结果也是long double类型。

    ②否则,如果其中一个数是double类型的,那么另一个操作数被转换为double类型,计算的结果也是double类型。

    ③否则,如果其中一个数是float 类型的,那么另一个操作数被转换为float 类型,计算的结果也是float类型。

    ④否则,如果一个数是unisigned类型,那么另一个操作数被转换为unisigner 类型,计算的结果也是unisigner类型。

    ⑤否则,如果其中一个数是long long int 类型,那么另一个操作数被转换为long long int 类型,计算的结果也是long long int 类型。

    ⑥否则,如果其中一个数是long int类型,那么另一个操作数被转换为long int类型,计算的结果也是long int类型。

    7、否则,如果其中一个数是int类型,那么其他的如Bool、char、short int、bit field、枚举类型,则全部转换为int 类型,计算的结果也是int类型。

    8、unsigned 一般比同级的整形 类型高两个级别。

    图2-5 表示了几个常用的数值型数据的自动转换规则,数据可以向箭头所指的类型转换。

     
    图2-5 自动转换规则

    【例2-11】数据类型转换。

    1. #import <Foundation/Foundation.h> 
    2. int main (int argc, const char * argv[]) {  
    3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
    4. float PI=3.14159;  
    5. int s,r=5;  
    6. s=r*r*PI;  
    7. NSLog (@"s=%i",s) ;  
    8. [pool drain];  
    9. return 0;  

    【程序结果】

    1. s=78 

    本例程序中,PI 为实型,s、r 为整型。在执行s=r*r*PI 语句时,r 和PI 都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。

    强制类型转换是通过类型转换运算来实现的,其一般形式为:

    1. (类型说明符) (表达式) 

    其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如:

    1. (float) a //把a 转换为实型  
    2. (int) (x+y) //把x+y 的结果转换为整型 

    在使用强制转换时,应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y 则成了把x 转换成int 型之后再与y 相加了。另外,无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据声明时对该变量定义的类型。

    【例2-12】强制类型转换实例。

    1. #import <Foundation/Foundation.h> 
    2. int main (int argc, const char * argv[])  
    3. {  
    4. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
    5. float f=5.75;  
    6. NSLog (@" (int) f=%i,f=%f", (int) f,f) ;  
    7. [pool drain];  
    8. return 0;  

    【程序结果】

    1. (int) f=5,f=5.750000 

    本例表明,f 虽强制转为int 型,但只在运算中起作用,是临时的,而f 本身的类型并不改变。因此,(int)f的值为5,删去了小数,而f的值仍为5.750000。

  • 相关阅读:
    UTF-8和GBK的区别
    JSP页面中的pageEncoding和contentType两种属性
    tomcat中reloadable作用
    为什么Servlet修改之后,Tomcat都得重启,servlet才会生效!
    windows下mysql表名不自动转换小写配置
    导入mysql文件提示“ASCII '' appeared in the statement”
    request:getParameter和getAttribute区别
    Eclipse常用快捷键
    For input string: "null"
    国内外知名IT科技博客(强烈推荐)
  • 原文地址:https://www.cnblogs.com/wangpei/p/3519291.html
Copyright © 2011-2022 走看看