【iOS 开发】Objective - C 语法 之 类型转换

简介: 【iOS 开发】Objective - C 语法 之 类型转换

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$


目录
相关文章
|
6天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
24 9
|
6天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
4天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
7天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
10天前
|
存储 数据可视化 Swift
探索iOS开发之旅:从新手到专家
【10月更文挑战第33天】在这篇文章中,我们将一起踏上一场激动人心的iOS开发之旅。无论你是刚刚入门的新手,还是已经有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。我们将从基础的iOS开发概念开始,逐步深入到更复杂的主题,如用户界面设计、数据存储和网络编程等。通过阅读这篇文章,你将获得成为一名优秀iOS开发者所需的全面技能和知识。让我们一起开始吧!
|
6月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
392 2
|
2月前
|
设计模式 前端开发 Swift
探索iOS开发:Swift与Objective-C的较量
在这篇文章中,我们将深入探讨iOS开发的两大编程语言——Swift与Objective-C。我们将分析这两种语言的特性、优势和局限性,并讨论它们在现代iOS开发中的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和建议。
57 3
|
6月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
264 0
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
178 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
249 0