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

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

1. 自动类型转换

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

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

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

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

示例 :

-- Object-C 代码 :

/*************************************************************************
    > File Name: 09_typeAutoConversion.m
    > Author: octopus
    > Mail: octopus_truth.163.com
    > Created Time: 一  9/ 8 11:18:53 2014
 ************************************************************************/
#import <Foundation/Foundation.h>

 int main(int argc, char **argv)
 {
	@autoreleasepool{
		/* 定义 int 类型变量 */
		int a = 38;
		/* 将 int 类型变量转换为 float, 数值没有变化, 只是类型发生了变化 */
		float b = a;
		/* 打印int -> float 结果, 打印 : 38 */
		NSLog(@"b = %g", b);

		/* 定义 short 类型变量 */
		short c = 38;
		/* 将 short 类型变量赋值给 char 变量, short 自动转化为 char 类型 */
		char d = c;
		/* 打印 short -> char 类型, 打印 : & */
		NSLog(@"d = %c", d);

		double e = 38.3838;
		/* 将 double 类型转为 int 类型, 小数部分自动省略 */
		int f = e;
		/* 打印 double -> int 类型, 打印 : 38 */
		NSLog(@"f = %d", f);

		/* 将 double 类型转为char 类型, 小数部分自动省略, 如果数值过大, 整数部分会溢出 */
		char g = e;
		/* 打印 double -> char, 打印 : & */
		NSLog(@"g = %c", g);

		int h = 40000;
		/* 将 int 类型转为 short 类型, 如果数值过大, 可能会溢出 */
		short i = h;
		/* 打印 int -> short, 溢出 打印 : -25536 */
		NSLog(@"i = %d", i);

	}
 }

-- 编译运行 :

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 代码 :

/*************************************************************************
    > File Name: 09_typeConversion.m
    > Author: octopus
    > Mail: octopus_truth.163.com
    > Created Time: 一  9/ 8 13:27:52 2014
 ************************************************************************/

#import <Foundation/Foundation.h>

int main(int argc, char * argv[])
{
	@autoreleasepool {
		int a = 38;
		int b = 100;

		/* int 类型 与 int 类型相除 还是 int 类型, 结果是 0 */
		float c = a / b;

		/* 先将 a 转为 float 类型, 再进行计算, 得出的结果就是 float 类型 */
		float d = (float)a / b;

		/* 将 float 类型转为 int 类型后再计算, 结果是 39 */
		int e = (int)38.3838 + (int)1.3838;

		NSLog(@"c = %g, d = %g, e = %d", c, d, e );
	}
}

-- 编译运行 : 

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 代码 :

/*************************************************************************
    > File Name: 09_typeAutoPromote.m
    > Author: octopus
    > Mail: octopus_truth.163.com
    > Created Time: 一  9/ 8 13:44:53 2014
 ************************************************************************/

#import <Foundation/Foundation.h>

int main(int argc, char * argv[])
{
	@autoreleasepool {
		short a = 37;

		/* a - 2 表达式中, a 会自动提升为 int 类型 */
		NSLog(@"计算 a - 2 的数据类型大小 : %ld", sizeof(a - 2));

		/* 整个表达式的数据类型转换为 double 类型 */
		double b = a / 2.0;
		NSLog(@"b = %g", b);
	}
}

-- 编译执行 :  

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

【IOS 开发】Object - C 语法 之 类型转换的更多相关文章

  1. iOS开发零基础--Swift教程 类型转换

    常见的类型转化符号 is : 用于判断一个实例是否是某一种类型 as : 将实例转成某一种类型 例子 // 1.定义数组 let array : [AnyObject] = [12, "wh ...

  2. iOS开发——OC篇&OC高级语法

    iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...

  3. iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

    本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...

  4. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  5. iOS开发核心语言Objective C —— 所有知识点总结

    C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增 ...

  6. iOS开发——MVC详解&Swift+OC

    MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过 ...

  7. iOS开发——面试指导

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...

  8. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  9. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

随机推荐

  1. day07 Cookie 和 Session(非常重要)

    day07 Cookie 和 Session 1. 会话技术 2. cookie 的方法和 cookie 案例-显示用户上次访问网站的时间 3. cookie 的细节 - 删除 cookie 4. S ...

  2. ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解

    sudo apt-get install rdesktoprdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏-a 16位色默认端口是3389(linux 22 s ...

  3. Hadoop系列:(一)hdfs文件系统的基本操作

    可以执行所有常用的Linux文件操作命令(读取文件,新建文件,移动文件,删除文件,列表文件等) 1.help命令获取没个命令的帮助 [cloudera@quickstart ~]$ hadoop fs ...

  4. aways on 配置部署(一)——准备工作

    sqlserver的aways on 配置需要经历三个步骤,前面两个步骤是对aways on 配置的一个准备步骤. 经过了一个星期的研究,终于成功的完成了前两个步骤,期间参考了很多的资料和博客,总感觉 ...

  5. java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to oracle.sql.CLOB

    错误现象: [framework] 2016-05-26 11:34:53,590 -INFO  [http-bio-8080-exec-7] -1231863 -com.dhcc.base.db.D ...

  6. MongoDB 固定集合

    MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! ...

  7. Docker常见仓库MongoDB

    MongoDB 基本信息 MongoDB 是开源的 NoSQL 数据库实现. 该仓库提供了 MongoDB 2.2 ~ 2.7 各个版本的镜像. 使用方法 默认会在 27017 端口启动数据库. $ ...

  8. TensorFlow入门和示例分析

    本文以TensorFlow源码中自带的手写数字识别Example为例,引出TensorFlow中的几个主要概念.并结合Example源码一步步分析该模型的实现过程. 一.什么是TensorFlow 在 ...

  9. android自定义View之3D索引效果

    效果图: 我的小霸王太卡了. 最近工作比较忙,今天搞了一下午才搞出来这个效果,这种效果有很多种实现方式,最常见的应该是用贝塞尔曲线实现的.今天我们来看另一种不同的实现方式,只需要用到 canvas.s ...

  10. Objective-C语法概述

    Objective-C语法概述 简称OC 面向对象的C语言 完全兼容C语言 可以在OC里面混入C/C++代码 可以开发IOS和Mac OS X平台应用 语法预览 关键字 基本上都是以@开头(为了与C语 ...