【IOS 开发】Object - C 语法 之 类型转换
作者 : 万境绝尘 (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 语法 之 类型转换的更多相关文章
- iOS开发零基础--Swift教程 类型转换
常见的类型转化符号 is : 用于判断一个实例是否是某一种类型 as : 将实例转成某一种类型 例子 // 1.定义数组 let array : [AnyObject] = [12, "wh ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
- iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法
本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...
- iOS开发swift语法0基础篇—————(swift技术交流群:361513739)
iOS开发之swift语法0基础篇:点击打开链接 swift技术交流QQ群361513739
- iOS开发核心语言Objective C —— 所有知识点总结
C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增 ...
- iOS开发——MVC详解&Swift+OC
MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过 ...
- iOS开发——面试指导
iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...
- iOS开发核心语言Objective C —— 全部知识点总结
本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
随机推荐
- ubuntu15.10 opencv3.1 安装配置codeblocks
安装codeblocks: sudo add-apt-repository ppa:damien-moore/codeblocks-stable // 添加codeblocks的ppa sudo ap ...
- Python中切片的工作原理
切片时的索引是在两个字符之间.左边第一个字符的索引为 0,而长度为 n 的字符串其最后一个字符的右界索引为n. 例如: +---+---+---+---+---+---+ | P | y | t | ...
- ejabberd为游戏免除注册限制
ejabberd为游戏免除注册限制 (金庆的专栏 2016.11) ejabberd聊天服务器默认会限制同一IP注册帐号须间隔600s. 在游戏中需要为每个角色注册一个聊天帐号,不应该有此限制. 可以 ...
- UDP单播和组播使用SO_REUSEADDR 测试结果
UDP单播通信 一. 预置条件 A.B在同一台机器,网络中存在往A.B所在的机器的8888端口发送单播UDP数据 A:端口复用绑定在端口8888上 B:端口复用绑定在端口8888上操作步骤:(1)先启 ...
- DB查询分析器7.01新增的周、月SQL执行计划功能
DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 1 引言 中国本土 ...
- Android 5.0 调色 Palette调色功能
Palette非常好用,也非常好玩. Palette的作用是从图像中提取突出的颜色,这样我们可以根据提取到的色值把它赋给Toolbar,标题,状态栏等,可以使我们的整个界面色调统一,效果非常好看. P ...
- 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html
什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念 ...
- Cocoa层粒子发射器动画添加多个cell的一种重构
在iOS动画之旅第19章中最后的挑战中需要我们在雪花例子发生器中添加多个雪花贴图,也就是多个cell,因为我们不可能将每个cell的参数都重新写一遍,所以有必要写一个helper方法来做这件事: fu ...
- iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在iOS9的SDK中我们会发现原来地址簿权限查询,获取以及创建 ...
- 2.QT中使用资源文件,程序打包
1 程序中使用资源文件 A 一个QT空项目 B 右击项目,添加新文件 添加后的效果是 C 右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: ...