OC学习1——基本数据类型

1、OC是在C语言的基础上进行扩展的一种面向对象的编程语言。很多基础知识都和C语言中的非常类似。首先介绍一下OC中的基本数据类型,整体框架如下图:

 2、自动数据类型转换顺序:short --> int --> long --> long long --> float --> double --> long double(注意:整型往浮点型自动转换)

      强制类型转换:整型转化为浮点型时基本不会有太大的变化,而当浮点转化为整型时,数值的小数部分会直接舍去

3、OC中NSLog输出函数的格式:

格式字符

说明

格式字符

说明

d

带符号十进制

f

小数形式输出,默认输出6位小数

o

无符号八进制

e

指数形式输出,数值不分默认输出6位小数

x

无符号十六进制

g

自动选用%f或%e输出,保证以最简形式输出,并不会输出无意义的0

u

无符号十进制

p

以十六尽职形式输出指针变量所代表的地址值

c

字符形式,只输出一个字符

@

输出OC对象

s

输出C风格字符串

l

用在d、o、x、u之前用于输出长整型;在f、e、g之前用于输出长浮点型

m

用于制定输出数据所占的最小宽度为m位

.n

对于浮点数,表示输出n位小数,对于字符串,表示截取的字符个数

_

表述输出的数值向左边对齐

4、枚举(enum):枚举的本质是无符号整数,可以通过直接用数值的方式给枚举变量进行赋值。

//enum中定义的数值依次取值位0 1 2 3 。。。
enum season {spring, summer, fall, winter} ;
enum season myLove = spring ;
//所以取值为2的是代表秋天fall
enum season yourLove = 2;

5、BOOL类型:OV的底层实际上是使用signed char来代表BOOL。

1 typedef signed char BOOL;
2 #if !defined (YES)
3     #define YES (BOOL)1
4 #endif
5 
6 #if !defined (NO)
7     #define NO (BOOL)0
8 #endif

值得注意的是:BOOL的底层只占用一个字符,所以如果一个非0整数的低八位表示的数为0,则其转化位BOOL类型值为NO。而且YES表示的值是确定的数值1,可以与其进行比较,所以5 == YES的结果是NO,5 > YES的结果是YES.

6、数组定义语法如下。如果定义的是全局数组,则该length不允许是变量,只能是整数值或常量。

 1 type arrayName[length]
 2 
 3 //可以直接制定length
 4 int arr[2] = {2, 3} ;
 5 
 6 //也可以不指定length,系统自动根据赋值情况来确定
 7 int arr[] = {1, 2, 3, 4} ;
 8 
 9 //多维数组
10 int arr[2][3] = {{1, 2, 3}, {4, 5, 6}} ;
11 
12 //也可以不全部初始化,但是每一行的维度肯定是一样的
13 //下面表示定义了一个3行2列的数组,其中第二行只初始化了arr[1][0]元素
14 int arr[][2] = {{1,2}, {3}, {5,6}} ;

7、OC中的运算符就不多少了,和一般的Java、C的差不多,补充一点就说左移(<<)右移(>>)运算符,左移时低位补0;右移是带符号右移,如果操作数位正数,则高位补0,如果操作数位负数,则高位补1.

 8、结构体:将多个基本数据类型的变量组合成一个整体。结构体中访问内部成员用点运算符访问

 1 //结构体类型定义
 2 struct 结构体类型名
 3 {
 4    //成员列表 
 5 }
 6 
 7 //结构体变量定义
 8 struct 结构体类型名 变量名;
 9 
10 //也可以同时在定义结构体和结构体变量
11 struct 结构体类型名
12 {
13    //成员列表 
14 }变量名1, 变量名2;
15 
16 //定义Point结构体并定义两个变量
17 struct Point
18 {
19     int x ;
20     int y ;
21     int z ;
22 }location1,location2 ;
23 
24 //定义Point的变量location3并初始化
25 struct Point location3 = {10,20,30};

 9、OC是面向对象的编程语言,与Java类似,OC中的基本数据类型(如short、int、float等)都不是对象,他们都不具备对象的特性,没有属性方法可以被调用。OC中提供了NSValue、NSNumber来封装C语言的基本类型,这样我们就可以让他们具有面向对象的特征了。

  • NSValue是NSNumber的父类,NSValue代表一个更通用的包装类,它可以用于单个的short、int、float、char、指针、对象id等数据项,通过该包装类就可以把short、int、float、char、指针等添加到NSArray、NSSet等集合(集合的元素必须为对象)中。
  • NSNumber是更具体的包装类,主要用于包装C语言的各种数值类型,NSNumber主要包括3类方法:
    • + numberWithXxx:该类方法直接将特定类型的值包装成NSNumber。
    • - initWithXxx:该实例方法需要先创建一个NSNumber对象,再用一个基本类型来初始化NSNumber。
    • - xxxValue:该实例方法返回该NSNumber对象包装的基本类型的值。

10、还有一点值得注意的是,在OC中还存在NSInterger(大致相当于long型整数)、NSUInterger(大致相当于unsigned long型整数)、CGFLoat(在64位平台大致相当于double,在32位系统大致相当于float)三个类型,与Java不同的是,他们并不是包装类,只是用typedef对基本类型进行了重定义而已,他们依然只是基本类型!他们依然只是基本类型!他们依然只是基本类型!重要的事情说三遍。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

自定义类型转换器之TypeConverter

  C#提供了很多类型转换的方法如ConvertToInt、int.Parse、int.tryParse等等,这些方法都能将一个C#的基本数据类型转换成另一个C...

22270
来自专栏积累沉淀

JavaScript对象和数组

学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。 一...

28550
来自专栏Create Sun

基础拾遗------泛型详解

前言:   泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。类型参数使得设计类和方...

37090
来自专栏DHUtoBUAA

查找数组中重复的数字

        题目来源于《剑指Offer》中的面试题3:找出数组中重复的数字。   // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中...

45660
来自专栏xingoo, 一个梦想做发明家的程序员

Kruskal算法

同样是求最小生成树,kruskal适合从边的角度出发,因此适合稀疏图。而prim算法从点的角度出发,适合稠密图。 时间复杂度为O(eloge)。因为外层循环了e...

27650
来自专栏程序员互动联盟

【专业知识】C++的强制类型转换

C 风格(C-style)强制转换一般用(类型修饰)来转换类型。C++则有自己的转换方式 使用标准C++的类型转换符:static_cast、dynamic_c...

31540
来自专栏王亚昌的专栏

printf格式控制符[备忘]

(1)输出格式控制综述:     printf的格式控制的完整格式:%  -  0  m.n  l或h     ①%:格式说明的起始符号,不可缺少。   ...

9520
来自专栏移动端开发

Swift 内存管理详解

Swift内存管理: Swift 和 OC 用的都是ARC的内存管理机制,它们通过 ARC 可以很好的管理对象的回收,大部分的时候,程序猿无需关心 Swift...

25090
来自专栏C/C++基础

C++纯虚函数与抽象类

为什么说虚函数是C++最重要的特性之一呢,因为虚函数承载着C++中动态联编的作用,也即多态,可以让程序在运行时选择合适的成员函数。虚函数必须是类的非静态成员函数...

30820
来自专栏数据处理

Scala函数

23050

扫码关注云+社区

领取腾讯云代金券