按照数据类型占用存储不同可以自动类型转换或强制类型转换,总的原则是小存储容量数据类型可以自动转换成为大存储容量数据类型。
不同类型数据间按照下面关系的从左到右(从低到高)自动转换,
_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/
分享到:
相关推荐
### Objective-C 数据类型和运算符 #### 一、Objective-C 数据类型概述 Objective-C 是一种通用、面向对象的编程语言,它在 C 语言的基础上增加了面向对象的能力。Objective-C 主要用于开发 macOS 和 iOS 应用程序...
在Objective-C中,类型转换需要特别注意,因为它是动态类型语言。类型转换在需要明确指明期望的对象类型时变得尤为重要。 13. 性能和效率 由于Objective-C是解释型语言,因此在某些情况下性能可能不如编译型语言。...
- **类型转换**:通过`as!`, `as?`和`as`关键字,Swift对象可以在适当的时候转换为Objective-C对象,反之亦然。 3. **混合编译**: - **模块(Module)**:Swift引入了模块的概念,可以更好地组织代码并允许跨文件...
这种设计提高了效率,允许不同数据类型的子类提供更高效的实现。isa-swizzling是实现这一特性的一种技术,它可以在运行时改变对象的类指针,从而改变对象的行为,但这必须谨慎操作,因为错误的类指针设置可能导致...
Foundation框架是Objective-C编程的基础框架,提供了核心的数据类型和程序运行的基础支持。在本书中,读者可以了解到: 1. Foundation框架中的基本数据类型,如NSNumber、NSString、NSArray、NSDictionary等。 2. ...
- 它是 C 语言的超集,意味着所有合法的 C 代码都是 Objective-C 的一部分,同时增加了面向对象编程的特性,如类别(categories)、协议(protocols)和动态类型等。 - Objective-C 的核心是消息传递机制,类似于 ...
6. Foundation框架:Objective-C的基础库Foundation框架提供了许多核心的类和功能,如NSArray、NSDictionary等容器类,以及NSString、NSNumber等基础数据类型。C++程序员需要学习这些类的用法,以适应Objective-C的...
Foundation框架是Objective-C的基础,包含了许多常用的数据类型和实用工具类,如NSArray、NSDictionary、NSString等。Core Foundation是Foundation的底层C语言接口,两者可以相互转换,提供了更底层的控制。 在...
在Swift-Objective-C项目中,开发者可能会利用Swift的简洁语法和强类型特性来创建核心功能,同时利用Objective-C的兼容性和丰富的Cocoa Touch框架来处理与系统更底层的交互。 "动画库"标签表明这个项目可能包含了...
Swift可以自动将`nil`转换为Swift的`Optional`类型,从而避免了在使用Objective-C API时出现的强制类型转换。 **扩展(Extensions)** Swift中的扩展可以为现有类型添加新的功能,如方法、属性等。这对于增强...
- Objective-C的基本数据类型和运算符 2. 第二章 - 类与对象 - 类的定义和对象的创建 - 属性(Properties)和实例变量 - 方法(Methods)的声明和调用 - 封装、继承和多态的概念与实现 3. 第三章 - 基本数据...
在Objective-C编程中,MD5被用来确保数据的完整性和一致性,尤其是在存储或者传输过程中。以下是对MD5在Objective-C中实现的详细解释。 首先,MD5算法产生一个128位(16字节)的摘要,通常以32位的16进制字符串形式...
Objective-C 是一种面向对象的编程语言,它结合了C语言的基础语法与Smalltalk的面向对象能力。Objective-C 的一大特色是其强大的运行时特性,这些特性使得它能够在程序执行期间动态地处理很多任务,比如消息传递、...
Objective-C支持多种数据类型,并且提供了丰富的运算符。例如,可以进行简单的算术运算: ```objective-c int sum = 20 + 25; NSLog(@"The sum is %i", sum); ``` ##### 3. 键盘输入 Objective-C中的键盘输入可以...
Objective-C的类型信息是在运行时确定的,允许动态类型转换和动态加载类。Foundation框架中的`NSClassFromString`函数可以依据字符串创建对象。 5. **协议(Protocol)** 协议定义了一组方法,对象可以选择遵守...
预处理器宏如`#define`用于文本替换,枚举用于定义一组关联的常量,类型转换允许不同数据类型之间的转换。 13.8 工作原理 了解这些基本的C语言特性有助于理解Objective-C如何在内存中管理和操作数据,以及函数调用...
`Foundation` 是Objective-C中一个重要的框架,它包含了处理字符串、数组、集合等基础数据类型和其他常用功能的类。通过导入`Foundation`框架,我们可以使用其中提供的类和函数,例如`NSLog`函数。 ##### 2. `main`...