对比一下OC和C差别,首先第一个是数据类型。
C语言的数据类型分哪几类?C语言有哪些数据类型?
基本数据类型当然还包括int的一些修饰符。像short、long、long long、unsigned。typedefine给已有的数据类型取一个别名。
C语言还新增了一些数据类型:BOOL类型。条件表达式:比较表达式/关系表达式,第二种是逻辑表达式.C语言用int类型的变量来表示比较表达式/关系表达式和逻辑表达式的结果。0表示不成立,非0表示成立。
3). BOOL的本质. typedef signed char BOOL; 实际上BOOL类型的变量 是1个有符号的char变量.
所以BOOL b1在内存当中是占1个字节。OC所谓的新增数据类型99.99%的情况下都是typedef
BOOL b2 = YES; char b3 = 1;
所以这两句话在内存上没有任何区别。BOOL类型的可读性高一些。所以从今天开始要存储一个条件表达式的结果,请你使用BOOL类型。OC当中新增的第一个类型:BOOL类型。
BOOL的本质. typedef signed char BOOL; 实际上BOOL类型的变量 是1个有符号的char变量. #define YES ((BOOL)1) #define NO ((BOOL)0) YES 实际上就是 1 NO 实际上就是 0
Boolean类型的本质:
typedef unsigned char Boolean;
Boolean其实是一个无符号的char类型.
true和false更直接,他们两个其实是两个宏.
#define true 1 #define false 0
这句话
Boolean b1 = false;
在预编译的时候已经换成了这句话
unsigned char b1 = 0;
所以可以给Boolean类型的变量赋一个数字给它,包括0和1.因为Boolean类型的变量b1是char类型.
//Boolean b1 = 0; Boolean b1 = 10; //Boolean b1 = 1; //Boolean b1 = 20;
为什么要搞个Boolean类型的变量?因为可读性高一些。
现在要表示一个条件表达式有两种,一个是BOOL,一个是Boolean.用哪个呢?但是记住要用BOOL类型,因为BOOL类型(布尔类型)四个字母就搞定了,简洁明了.绝大部分情况我们都是使用布尔BOOL.为什么有了布尔类型BOOL还要搞一个Boolean类型呢?因为它要吸引别的程序员。有的编程语言里面叫BOOL,有的编程语言里面叫Boolean.例如C#叫BOOL,java里面叫Boolean.这样它就可以吸引别的语言的程序员过来。我们平时就用BOOL.
这就是OC在C语言基础之上新增的两个数据类型:BOOL和Boolean。.
/* 1. OC中的数据类型. 1). OC中支持C语言中的所有的数据类型. a. 基本数据类型 int double float char b. 构造类型 数组 结构体 枚举 c. 指针类型 int *p1; d. 空类型. void e. typedef自定义类型. 2). BOOL类型. 1). 可以存储YES或者NO中的任意1个数据. 2). 一般情况下BOOL类型的变量用来存储条件表达式的结果.如果条件表达式成立 那么结果就是YES 如果条件表达式不成立 结果就是NO 3). BOOL的本质. typedef signed char BOOL; 实际上BOOL类型的变量 是1个有符号的char变量. #define YES ((BOOL)1) #define NO ((BOOL)0) YES 实际上就是 1 NO 实际上就是 0 3). Boolean a.Boolean类型的变量可以存储true或者false b.一般情况下BOOL类型的变量用来存储条件表达式的结果.如果条件表达式成立 那么结果就是true 如果条件表达式不成立 结果就是false c.本质 typedef unsigned char Boolean; 4). class类型. 类. 5). id类型 万能指针. 6). nil 与NULL差不多. 7). SEL 方法选择器. 8). block 代码段. */ #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { //int num = 12; int num1 = 10; int num2 = 20; //BOOL b1 = YES; //Bool b1 = NO; //BOOL b1 = mum1 > num2;//条件表达式的结果就可以存在b1这个变量里面去了 //BOOL b2 = YES; //char b3 = 1; //Boolean b1 = num1 > num2; //Boolean b1 = false; //Boolean b1 = 0; Boolean b1 = 10; //Boolean b1 = 1; //Boolean b1 = 20; //unsigned char b1 = 0; } return 0; }