【iOS 开发】Objective - C 语法 之 类型转换

举报
韩曙亮 发表于 2022/01/11 01:29:27 2022/01/11
【摘要】 作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/39135079     1. 自动类型转换   自动类型转换 : 将一个基本类型变量 赋值给另外一...

作者 : 万境绝尘 (octopus_truth@163.com)

转载请注明出处http://blog.csdn.net/shulianghan/article/details/39135079

 

 

1. 自动类型转换

 

自动类型转换 : 将一个基本类型变量 赋值给另外一个基本类型变量就会出现基本类型转换;

-- 整型 -> 浮点型 : 除了类型转换为浮点型之外, 不会有太大变化;

-- 浮点型 -> 整型 : 类型转为整型, 小数部分被舍弃;

-- 长整形 -> 整型 : 取值范围变小, 可能发生溢出;

 

示例

-- Object-C 代码

 


  
  1. /*************************************************************************
  2. > File Name: 09_typeAutoConversion.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 一 9/ 8 11:18:53 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char **argv)
  9. {
  10. @autoreleasepool{
  11. /* 定义 int 类型变量 */
  12. int a = 38;
  13. /* 将 int 类型变量转换为 float, 数值没有变化, 只是类型发生了变化 */
  14. float b = a;
  15. /* 打印int -> float 结果, 打印 : 38 */
  16. NSLog(@"b = %g", b);
  17. /* 定义 short 类型变量 */
  18. short c = 38;
  19. /* 将 short 类型变量赋值给 char 变量, short 自动转化为 char 类型 */
  20. char d = c;
  21. /* 打印 short -> char 类型, 打印 : & */
  22. NSLog(@"d = %c", d);
  23. double e = 38.3838;
  24. /* 将 double 类型转为 int 类型, 小数部分自动省略 */
  25. int f = e;
  26. /* 打印 double -> int 类型, 打印 : 38 */
  27. NSLog(@"f = %d", f);
  28. /* 将 double 类型转为char 类型, 小数部分自动省略, 如果数值过大, 整数部分会溢出 */
  29. char g = e;
  30. /* 打印 double -> char, 打印 : & */
  31. NSLog(@"g = %c", g);
  32. int h = 40000;
  33. /* 将 int 类型转为 short 类型, 如果数值过大, 可能会溢出 */
  34. short i = h;
  35. /* 打印 int -> short, 溢出 打印 : -25536 */
  36. NSLog(@"i = %d", i);
  37. }
  38. }

 

-- 编译运行

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 09_typeAutoConversion.m 
octopus-2:oc octopus$ ./a.out 
2014-09-08 13:08:41.250 a.out[1345:507] b = 38
2014-09-08 13:08:41.252 a.out[1345:507] d = &
2014-09-08 13:08:41.252 a.out[1345:507] f = 38
2014-09-08 13:08:41.253 a.out[1345:507] g = &
2014-09-08 13:08:41.253 a.out[1345:507] i = -25536
octopus-2:oc octopus$ 

 

 

 

 

 

 

2. 强制类型转换

 

强制类型转换 : 通过 (typeName) 可以强行指定一个变量的类型;

 

强制转换示例

-- Object-C 代码

 


  
  1. /*************************************************************************
  2. > File Name: 09_typeConversion.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 一 9/ 8 13:27:52 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. int a = 38;
  12. int b = 100;
  13. /* int 类型 与 int 类型相除 还是 int 类型, 结果是 0 */
  14. float c = a / b;
  15. /* 先将 a 转为 float 类型, 再进行计算, 得出的结果就是 float 类型 */
  16. float d = (float)a / b;
  17. /* 将 float 类型转为 int 类型后再计算, 结果是 39 */
  18. int e = (int)38.3838 + (int)1.3838;
  19. NSLog(@"c = %g, d = %g, e = %d", c, d, e );
  20. }
  21. }

 

 

-- 编译运行

 

octopus-2:oc octopus$ ./a.out 
2014-09-08 13:31:44.361 a.out[1391:507] c = 0, d = 0.38, e = 39
octopus-2:oc octopus$ 

 

 

 

 

 

3. 类型自动提升

 

表达式数据类型自动提升规则 :

-- 整型自动提升 : 所有的表达式中得 short 和 char 类型的数据都会被提升为 int 类型

-- 提升至最高类型 : 算数表达式的数据类型自动提高到表达式中等级最高的数据类型;

-- 类型等级规则 : 从低到高 : short -> int -> long -> longlong -> float -> double -> long double;

 

代码示例

-- Object-C 代码

 


  
  1. /*************************************************************************
  2. > File Name: 09_typeAutoPromote.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 一 9/ 8 13:44:53 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. short a = 37;
  12. /* a - 2 表达式中, a 会自动提升为 int 类型 */
  13. NSLog(@"计算 a - 2 的数据类型大小 : %ld", sizeof(a - 2));
  14. /* 整个表达式的数据类型转换为 double 类型 */
  15. double b = a / 2.0;
  16. NSLog(@"b = %g", b);
  17. }
  18. }


-- 编译执行 :  

 

 

octopus-2:oc octopus$ ./a.out 
2014-09-08 13:50:27.502 a.out[1418:507] 计算 a - 2 的数据类型大小 : 4
2014-09-08 13:50:27.505 a.out[1418:507] b = 18.5
octopus-2:oc octopus$ 

 

 

 

 

 

 

作者 : 万境绝尘 (octopus_truth@163.com)

转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/39135079

 

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/39135079

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。