Objective-C中的类型转换
转自:http://blog.csdn.net/lonelyroamer/article/details/7711920
类型转换
表2-3列出了简单数据类型、示例和格式符。
表2-3 简单数据类型、示例和格式符
![]() |
不同数据类型的数据是可以转换成同一种数据类型,然后进行计算。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的数据混合运算时,由系统自动完成。Objective-C 编译器会遵循一些非常严格的规则,编译器按照下面的顺序转换不同类型的操作数。
①如果其中一个数是long double类型的,那么另一个操作数被转换为long double类型,计算的结果也是long double类型。
②否则,如果其中一个数是double类型的,那么另一个操作数被转换为double类型,计算的结果也是double类型。
③否则,如果其中一个数是float 类型的,那么另一个操作数被转换为float 类型,计算的结果也是float类型。
④否则,如果一个数是unisigned类型,那么另一个操作数被转换为unisigner 类型,计算的结果也是unisigner类型。
⑤否则,如果其中一个数是long long int 类型,那么另一个操作数被转换为long long int 类型,计算的结果也是long long int 类型。
⑥否则,如果其中一个数是long int类型,那么另一个操作数被转换为long int类型,计算的结果也是long int类型。
7、否则,如果其中一个数是int类型,那么其他的如Bool、char、short int、bit field、枚举类型,则全部转换为int 类型,计算的结果也是int类型。
8、unsigned 一般比同级的整形 类型高两个级别。
图2-5 表示了几个常用的数值型数据的自动转换规则,数据可以向箭头所指的类型转换。
![]() |
图2-5 自动转换规则 |
【例2-11】数据类型转换。
- #import <Foundation/Foundation.h>
- int main (int argc, const char * argv[]) {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- float PI=3.14159;
- int s,r=5;
- s=r*r*PI;
- NSLog (@"s=%i",s) ;
- [pool drain];
- return 0;
- }
【程序结果】
- s=78
本例程序中,PI 为实型,s、r 为整型。在执行s=r*r*PI 语句时,r 和PI 都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。
强制类型转换是通过类型转换运算来实现的,其一般形式为:
- (类型说明符) (表达式)
其作用是把表达式的运算结果强制转换成类型说明符所表示的类型,例如:
- (float) a //把a 转换为实型
- (int) (x+y) //把x+y 的结果转换为整型
在使用强制转换时,应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y 则成了把x 转换成int 型之后再与y 相加了。另外,无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据声明时对该变量定义的类型。
【例2-12】强制类型转换实例。
- #import <Foundation/Foundation.h>
- int main (int argc, const char * argv[])
- {
- NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- float f=5.75;
- NSLog (@" (int) f=%i,f=%f", (int) f,f) ;
- [pool drain];
- return 0;
- }
【程序结果】
- (int) f=5,f=5.750000
本例表明,f 虽强制转为int 型,但只在运算中起作用,是临时的,而f 本身的类型并不改变。因此,(int)f的值为5,删去了小数,而f的值仍为5.750000。
Objective-C中的类型转换的更多相关文章
- JavaScript中数据类型转换总结
JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...
- java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- JS中String类型转换Date类型 并 计算时间差
JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...
- SQL中的类型转换
SQL中的类型转换一直是以块心病,因为用得比较少,所以每次想用的时候都要想半天,恰好这段时间比较空,整理整理.今天写个标题先.
- Struts2中的类型转换
1. Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概 ...
- java中的类型转换
java中的类型转换分为两种 自动类型转换 要实现数据的自动类型转换必须同时满足下面两个条件 两种数据类型彼此兼容 目标类型的取值范围大于原类型范围 强制类型转换 当两种数据类型彼此不兼容,或者说目标 ...
- objective C中的字符串NSStirng常用操作
objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
随机推荐
- The file “Info.plist” couldn’t be opened because there is no such file
修改了Info.plist的实际文件位置(项目和单元测试对应不同的Info.plist),报错 (null): could not read data from '/Users/xxxxx/Deskt ...
- 云计算与OpenStack(虚拟机Nova篇)
<云计算与OpenStack(虚拟机Nova篇)> 基本信息 作者: 伯龙 程志鹏 张杰 出版社:电子工业出版社 ISBN:9787121201202 上架时间:2013-8-5 出版日期 ...
- DSSM 深度学习解决 NLP 问题:语义相似度计算
https://cloud.tencent.com/developer/article/1005600
- xampp Apache Access forbidden! Error 403解决方法
今天下载了最新的xampp,配置了一个虚拟主机,一直在报错,Access forbidden! Error 403 这很明显是服务器不允许访问文件,但是我的虚拟主机配置如下: DocumentRoot ...
- rsa实现js前台加密java后台解密
前段时间写了一个rsa前台加密到后台用java解密,下面共享下实现思路: 准备工作:第三方包是必须的 bcprov-jdk15on-148.jar commons-codec-1.7.jar comm ...
- java map 分析
java 8 对HashMap进行了优化, 当碰撞时使用TreeNode的二分方法查找数据: 但是当数据碰撞厉害的时候, table有很多浪费. table 大小等于size/factor, 当碰撞很 ...
- RocketMQ-创建MappedFile本地文件
了解RocketMQ的都知道,它会保存所有的消息到本地文件.这个文件就是 MappedFile,每一个文件对应一个MappedFile.默认情况下大小位1g. 在MessageStoreConfig中 ...
- Win7是否可以把光盘当作U盘用
光盘当作U盘用 在Windows 7刻录功能中,之前有看到一篇文章<Windows7 新功能 光盘当U盘用>(感兴趣的同学可以百度一下),文章的意思大致是说作者插入了一张空的DVD光盘,然 ...
- 易语言调用csharp写的COM组件的程序在Win2008上奔溃的解决办法
易语言调用csharp写的COM组件,除了要注册csharp写的dll之外(由于是.net代码,需要用.net自带的注册工具RegAsm.exe注册,具体注册方法为: C:\WINDOWS\Micro ...
- 关于Fragment的懒加载问题
为了达到界面效果,我们有时需要使用到TabLayout+ViewPager的方式来布局界面,然而ViewPager的adapter总是默认把与当前可见的fragment相邻的两个fragment给加载 ...