zoukankan      html  css  js  c++  java
  • 【转】Objective-C BOOl、bool比较

     
     
    布尔值
    宏定义 真为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分。
  • 相关阅读:
    网络传输协议 UDP & TCP 详解
    OSI 七层协议
    (01day)python接口测试
    Python2和Python3的区别,以及为什么选Python3的原因
    JAVA反编译工具
    JAR反编译工具
    webdriver19-witchto方法
    webdriver实例14-Xpath定位的几种方法
    webdirver实例1--查找元素
    Qt插件开发
  • 原文地址:https://www.cnblogs.com/cc-Cheng/p/3342351.html
Copyright © 2011-2022 走看看