objective-C中的数据范例转换
副标题#e#
凭据数据范例占用存储差异可以自动范例转换或强制范例转换,总的原则是小存储容量数据范例可以自动转换成为大存储容量数据范例。
差异范例数据间凭据下面干系的从左到右(从低到高)自动转换,
_Bool 、 char 、 short int 、列举范例 -> int ->long int->long long-> float -> double -> long double 。
假如这些数据范例举办殽杂运算,运算中差异范例的数据先转化为同一范例,然后举办运算,转换从左到右自动转换,如表 2-3 所示。
表 2-3 范例转换先后顺序表
操纵数 1 范例 | 操纵数 2 范例 | 转换后的范例 |
_Bool 、 char 、 short int 、列举范例 | int | int |
_Bool 、 char 、 short int 、列举范例、 int | long int | long int |
_Bool 、 char 、 short int 、列举范例、 int 、 long int | long long | long long |
_Bool 、 char 、 short int 、列举范例、 int 、 long int 、 long long | float | float |
_Bool 、 char 、 short int 、列举范例、 int 、 long int 、 long long 、 float | double | double |
_Bool 、 char 、 short int 、列举范例、 int 、 long int 、 long long 、 float 、 double | long double | long double |
#p#副标题#e#
假如有下面的暗示式,个中, f 是 float 范例, i 为 int 范例, l 为 long int 范例, s 为 short int 范例,功效是什么范例?
f * i + l /s
运行功效为 float 范例,这是因为 f 是 float 其它的操纵数与 float 运算其功效就是 float 范例。
#p#分页标题#e#
假如遵守范例转换是右到左环境,就需要强制范例转换 了,强制范例转换语法形式上很简朴,就是在数据前面加上(方针范例),可是这种转换是存在风险的,有大概造成数据的丢失,需要审慎举办。譬喻:
long int l = 6666666666;
NSLog(@"l = %li",l);
int i = (int)l;
NSLog(@"i = %i",i);
运行的功效是,个中 6666666666 数值已经超出了 int 范例的容量,因此呈现了数据的丢失。
l = 6666666666
i = -1923267926
强制转换有的时候嵌入在其它的表达式内里,它会与运行的优先级交叉在一起,环境就会变的越发巨大,假设有下面的几条语句:
int total = 3446;
int n = 6;
float average = total / n;
运行完成 float 的变量 average 功效是 574 ,小数点内容被截取掉了,假如我们回收下面的语句实现:
int total = 3446;
int n = 6;
float average = (float)total / n;
#p#分页标题#e#
运行完成 float 的变量 average 功效是 574.333 ,这个数据要比上面计较的准确,这是因为 (float)total 先把 int 范例的 total 变量转换成为 float 范例的 total 变量。
本文出自 “驿落薄暮” 博客,请务必保存此出处http://yiluohuanghun.blog.51cto.com/3407300/1153588