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对基本类型进行了重定义而已,他们依然只是基本类型!他们依然只是基本类型!他们依然只是基本类型!重要的事情说三遍。
- HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
- Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑
- Node.js真的无所不能?那些不适用的应用领域分析
- hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)
- nyoj------79拦截导弹
- HDUOJ-------2719The Seven Percent Solution
- Golang记录、计算函数执行耗时、运行时间的一个简单方法
- uva----11729 Commando war (突击战争)
- uva-----11292 The Dragon of Loowater
- golang简单位运算示例
- 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
- 初学java之事件响应(结合接口来设置在同一个界面上!)
- 初学java之触发响应事件举例子
- 初学java之(盒子分布)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# 关键字之 decimal
- 设计模式(8)[JS版]-JavaScript设计模式之如何实现适配器模式???
- Python3与OpenCV3.3 图像处理(二)--图像基本操作
- 前端基础:ECMAScript 6
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- 前端基础:Boostrap
- 设计模式(10)[JS版]-JavaScript如何实现组合模式???
- JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器
- 漫画:设计模式之 “工厂模式”
- 设计模式(11)[JS版]-JavaScript中的注解之装饰器模式
- JavaWeb - Servlet:重定向和转发,状态管理
- 设计模式(12)[JS版]--JavaScript必会设计模式之外观模式(Façade Pattern)
- JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式
- kill -9 导致 Kakfa 重启失败的惨痛经历!
- 图解 DataX 核心设计原理