在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
布尔值
宏定义 真为YES 假为NO Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间,YES定义为1,而NO定义为0(使用#define)。 Objective-C并不将BOOL作为仅能保存YES或NO值的真正的布尔类型来处理。编译器将BOOL认作8位二进制数,YES和NO值只是一种约定。 这引发了一个小问题:如果不小心将一个长于1字节的整型值(例如short或int值)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。 假设该低位字节刚好为0(例如8960,写成十六进制0x2300),BOOL值将会是0,即NO值。 BOOL
在其大多数历史阶段,C都缺乏一个定义的布尔类型。它通过计算表达式来确定真值。如果一个表达式计算为0,则被认为是假;相反,则为真。 C99标准添加了一个布尔类型,bool,并且还添加了真值true和假值false。Objective-C有自己的布尔类型,BOOL,并且还有真值常量YES和假值常量NO。 BOOL不是一个基本类型。它是无符号的char的一个typedef(别名)。YES和NO只是为1和0定义的常量。 由于Objective-C继承了所有的C类型,因此我们可以在自己的Objective-C程序中使用bool类型。 然而,Cocoa框架和大多数已有的Objective-C代码使用BOOL。尽管可以在bool和BOOL之间相互转换,除非你的程序用到的库使用了bool,否则干脆忘掉bool会更容易一些。 注意 尽管Objective-C当前的版本是基于C99标准的,但Objective-C最初只是作为缺乏布尔类型的一个较早版本的C的扩展而开发的。 尽管C99的bool类型也可以使用,但大多数Objective-C社群使用Objective-C的BOOL。 SEL SEL是保存了一个Objective-C方法名表示的一种类型。SEL是selector的缩写。方法名有时候叫做选择器,因为运行时使用它们来选择要执行的代码,以响应一条消息。 IMP IMP是一个typedef,用于“一个指针,它指向接受参数id、SEL及可能的其他参数并且返回id的函数”。 BOOL和bool的区别
1、类型不同 BOOL为int型 bool为布尔型 2、长度不同 bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节 3、取值不同 bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。 如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。 BOOL是微软定义的typedef int BOOL(在windef.h中)。 布尔型变量bool bool是布尔型变量,也就是逻辑型变量的定义符,类似于float,double等,只不过float定义浮点型,double定义双精度浮点型。 在objective-c中提供了相似的类型BOOL,它具有YES值和NO值。 布尔型变量的值只有 真 (true) 和假 (false)。 布尔型变量可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真或为假。 bool可用于定义函数类型为布尔型,函数里可以有 return TRUE; return FALSE 之类的语句。 布尔型运算结果常用于条件语句, if (逻辑表达式) { 如果是 true 执行这里; } else { 如果是 false 执行这里; }; BOOL在iphone程序开发中很重要,一般配合if语句进行判断,处理程序中逻辑关系! if 语句与布尔值
if 语句是 C++/C 语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式 写 if 语句。 假设布尔变量名字为 flag,它与零值比较的标准 if 语句如下: if (flag) // 表示 flag 为真 if (!flag) // 表示 flag 为假 其它的用法都属于不良风格,例如: if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) BOOL,int,float,指针变量 与“零值”比较的if语句
分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var) 解答: BOOL型变量:if(!var) int型变量: if(var==0) float型变量: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 指针变量: if(var==NULL) 剖析: 考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var), 上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断; 如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。 浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。 |
请发表评论