【IOS 开发】Object - C 语法 之 类型转换

作者 : 万境绝尘 ([email protected])

转载请注明出处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$ 

作者 : 万境绝尘 ([email protected])

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

时间: 2024-11-20 08:26:22

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

IOS开发语言Swift入门连载---类型转换

IOS开发语言Swift入门连载-类型转换 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 类型转换在 Swift 中使用is 和 as 操作符实现.这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型. 你也可以用来检查一个类是否实现了某个协议,就像在 Checking for Protocol Conformance部分讲述的一样. 定义一个类层次作为例子 你可以将它用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的

iOS开发笔记--swift语法基础

基础数据类型 Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Array和Dictionary,请参考集合类型. Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple).元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值. Swift 还增加了可选(Optional)类型,用于处理值缺失

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

iOS开发swift语法初级篇—————(swift技术交流群:361513739)

iOS开发之swift语法初级篇:点击打开链接 swift技术交流QQ群361513739 iOS开发swift语法初级篇-----(swift技术交流群:361513739)

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

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

【好程序员笔记分享】——ios开发黄金语法

iOS培训------我的c语言笔记,期待与您交流! 就在去年11月份,当笔者决定走iOS开发之后就在网上买了三本书:iOS7快速入门,iOS开发指南-从零基础到App上架,Swift开发指南. 通过看完这三本书之后,笔者还是学到了一些知识,但是没有什么效果,最后笔者总结出了一点那就是,再看多的书不如自己动手操作,看十遍书也抵不上自己操作一遍. 当然在这三本书中,我最喜欢的就是iOS7开发快速入门,其中在这本书中我最喜欢的也就是第三章第八节中的分类与协议. 我觉得他是这本书中写的最好的,也许你们

从Android到iOS开发——(1)、objective-c与java语法对比

从Android到iOS开发--(1).objective-c与java语法 对比 从6月开始,因为有iOS项目要做,就开始了iOS开发之旅,截止今天,已经做了2个项目,给我的感受是iOS开发整体要比Android简单,但是开发细节上两者却又同样的烦恼.那么要想开发iOS,那么到底选择objective-c or swift,我的建议是前者,后者可以在swift2.0和xcode7 以后大家去学习会比较好些.好了,不废话了,下面咱们来看下objective-c和java语法上的比较,希望能让ja

iOS开发——MVC详解&amp;Swift+OC

MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过既然能看到这篇文档,说明你已经开始着手学习并且想深入研究它了,个人也是研究很久才搞懂,就写下来希望对各位有用,也能方便自己以后开发中查看,好了废话不多说,下面就来详细介绍一下MVC,并且用实例验证一下在项目开发中怎么去使用它. 相信你对 MVC 设计模式 并不陌生,只是不能完全理解其中的含义或者不能

iOS开发——面试指导

iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗? 答案:Objecitve-C的重要特性是Runtime(运行时),在#import <objc/runtime.h> 下能看