按照数据类型占用存储不同可以自动类型转换或强制类型转换,总的原则是小存储容量数据类型可以自动转换成为大存储容量数据类型。
不同类型数据间按照下面关系的从左到右(从低到高)自动转换,
_Bool
、
char
、
short int
、枚举类型
-> int ->long int->long long-> float -> double -> long double
。
如果这些数据类型进行混合运算,运算中不同类型的数据先转化为同一类型,然后进行运算,转换从左到右自动转换,如表
2-3
所示。
表
2-3
类型转换先后顺序表
操作数
1
类型
|
操作数
2
类型
|
转换后的类型
|
_Bool
、
char
、
short int
、枚举类型
|
int
|
int
|
_Bool
、
char
、
short int
、枚举类型、
int
|
long int
|
long int
|
_Bool
、
char
、
short int
、枚举类型、
int
、
long int
|
long long
|
long long
|
_Bool
、
char
、
short int
、枚举类型、
int
、
long int
、
long long
|
float
|
float
|
_Bool
、
char
、
short int
、枚举类型、
int
、
long int
、
long long
、
float
|
double
|
double
|
_Bool
、
char
、
short int
、枚举类型、
int
、
long int
、
long long
、
float
、
double
|
long double
|
long double
|
如果有下面的表示式,其中,
f
是
float
类型,
i
为
int
类型,
l
为
long int
类型,
s
为
short int
类型,结果是什么类型?
f * i + l /s
运行结果为
float
类型,这是因为
f
是
float
其它的操作数与
float
运算其结果就是
float
类型。
如果遵守类型转换是右到左情况,就需要强制类型转换
了,强制类型转换语法形式上很简单,就是在数据前面加上(目标类型),但是这种转换是存在风险的,有可能造成数据的丢失,需要谨慎进行。例如:
long int l = 6666666666;
NSLog(@"l = %li",l);
int i = (int)l;
NSLog(@"i = %i",i);
运行的结果是,其中
6666666666
数值已经超出了
int
类型的容量,因此出现了数据的丢失。
l = 6666666666
i = -1923267926
强制转换有的时候嵌入在其它的表达式里面,它会与运行的优先级交织在一起,情况就会变的更加复杂,假设有下面的几条语句:
int total = 3446;
int n = 6;
float average = total / n;
运行完成
float
的变量
average
结果是
574
,小数点内容被截取掉了,如果我们采用下面的语句实现:
int total = 3446;
int n = 6;
float average = (float)total / n;
运行完成
float
的变量
average
结果是
574.333
,这个数据要比上面计算的精确,这是因为
(float)total
先把
int
类型的
total
变量转换成为
float
类型的
total
变量。
致力于做中国最棒的移动应用培训机构 http://www.miiceic.org.cn/ios/
分享到:
相关推荐
【】2.ios预科班_oc_数据类型转换以及类方法变量属性 【】3.ios预科班_oc_内存管理_对象的初始化 【】4ios预科班_oc_存取器_继承_动态绑定和i 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
10.6 数据类型转换 10.6.1 转换规则 10.6.2 符号扩展 10.7 练习 第11章 分类和协议 11.1 分类 11.2 协议 11.3 合成对象 11.4 练习 第12章 预处理程序 12.1 #define语句 12.1.1 更高级的定义类型 12.1.2 #运算符 ...
进行类型转换 数据格式验证 为什么选择属性映射器? 有一些诸如Mantle,RESTKit之类的库可以帮助您解决这些问题,但是我想要的是自包含的,易于更改/删除且需要最少代码量的东西。 我在创建创建了Property Mapper ...
主要介绍了Swift使用Cocoa中的数据类型教程,Swift 会自动将一些 Objective-C 类型转换为 Swift 类型,以及将 Swift 类型转换为 Objective-C 类型,需要的朋友可以参考下
水晶数据库 ...安全映射:检查每种对象类型,并且可以安全地在SQLite和Objective-C之间进行转换 高性能:存储速度快,简单对象的存储速度比Realm快2-4倍,查询速度也比Realm快 性能 部署2000次GithubU
list() dict() gb_trees() proplist() {struct, proplist()} (通常在mochijson2中使用) {proplist()} ( ) map() Erlang 17+ 密钥仅允许使用以下数据类型,并且如果发生任何类型的强制转换,则它们必须为UTF-8:...
Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编) 具体的代码请下载这个文件,里面有更详细的jni使用方法,包括传递基本数据类型,返回基本数据类型的值,及类型的转换。
Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。
支持TypeScript , Python , Go , Ruby , C# , Java , Swift , Rust , Kotlin , C++ , Flow , Objective-C , JavaScript , Elm和JSON Schema 。 从JSON,JSON Schema和TypeScript交互式生成类型和(反...
WKT 格式转换 WKT Parser ,WKTParser 库带有任何的转换,解析器和格式,允许你解析三个主要的 WKT 数据类型:点线面(...
文章中有对官方文档的翻译,也有自己的理解,官方文档中代码片段的示例在这篇文章中都进行了完整的重写,还有一些文档中没有的代码示例,并且都使用Swift完成,给大家一些Objective-C与Swift转换的参考。线程也是...
JSON是一种轻量级的数据格式,一般用于数据交互JSON的格式很像Objective-C中的字典和数组:{“name”:”jack”,”age”:10} 补充: 标准的JSON格式的注意点:key必须用双引号。(但是在Java中是单引号) JSON-OC的...
IBAForms是一个Objective-C类库,提供基于UITableView和UITableViewCell等常见UIKit类的抽象层。 主要特性: 1、提供一套常见的表单字段类型((text, password, boolean, date, pick list); 2、管理表单字段...
网络解析json数据都是以字典的形式,我们有时候需要将json数据转换成model,显的特别麻烦,尤其是字典数组,或者字典中还有嵌套字典。 后者对象中包含对象想转换成NSDictionary字典时,也是特别麻烦。 为了解决这类...
自动类型转换:可以自动转换对象类型。 类型安全:将验证所有数据类型,以确保在转换过程中类型安全。 非介入式:无需使模型类继承自其他基类。 轻量级:此库仅包含5个文件。 文档和单元测试:100%的文档覆盖率,...
类型转换模块将JavaScript的String类型转换为一个java.lang.String对象 运行时环境为java.io.File创建一个代理对象 通过该代理将对原有JS File对象的调用委托给相应的Java实例 据Telerik介绍,与...
quicktype通过JSON,JSON Schema,TypeScript和生成强类型化的模型和序列化,从而使在许多编程语言中安全地使用JSON类型变得轻而易举。 。 阅读以获取更多介绍。 如有任何疑问,请先查看 。 支持的输入 JSON格式 ...
第10章 objective-c和iphone os128 10.1 下载sdk128 10.1.1 安装sdk128 10.1.2 sdk剖析130 10.2 objective-c介绍131 10.2.1 概述131 10.2.2 消息132 10.2.3 类定义133 10.2.4 属性135 10.2.5 ...