ObjectC中的BOOL类型

绝不要直接将BOOL值和YES比较

Objective-C中的BOOL实际上是一种带符号的的字符类型(signed char)的定义,它使用8位存储空间。YES定义为1,而NO定义为0.

  1. #import <Foundation/Foundation.h>
  2. BOOL areIntsDifferent(int things1, int things2)
  3. {
  4. if(things1 == things2)
  5. return (NO);
  6. else
  7. return (YES);
  8. }//areIntsDifferent
  9. NSString *boolString(BOOL yesNo)
  10. {
  11. if (yesNo == NO)
  12. return (@"NO");
  13. else {
  14. return (@"YES");
  15. }
  16. }
  17. int main(int argc, const char *argv[])
  18. {
  19. BOOL areTheyDifferent;
  20. areTheyDifferent = areIntsDifferent(5, 5);
  21. NSLog(@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent));
  22. areTheyDifferent = areIntsDifferent(23, 24);
  23. NSLog(@"are %d and %d different? %@", 23, 24, boolString(areTheyDifferent));
  24. return 0;
  25. }

这是一段很简单的代码,很容易得到如下结果:

注意到上面我们说了YES其实是1 ,并不是非零,将代码改变如下

  1. #import <Foundation/Foundation.h>
  2. BOOL areIntsDifferent(int things1, int things2)
  3. {
  4. /*
  5. if(things1 == things2)
  6. return (NO);
  7. else
  8. return (YES);
  9. */
  10. int diff = things1 - things2;
  11. if (diff == YES)
  12. return (YES);
  13. else
  14. return (NO);
  15. }//areIntsDifferent
  16. NSString *boolString(BOOL yesNo)
  17. {
  18. if (yesNo == NO)
  19. return (@"NO");
  20. else {
  21. return (@"YES");
  22. }
  23. }
  24. int main(int argc, const char *argv[])
  25. {
  26. BOOL areTheyDifferent;
  27. areTheyDifferent = areIntsDifferent(5, 5);
  28. NSLog(@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent));
  29. areTheyDifferent = areIntsDifferent(23, 24);
  30. NSLog(@"are %d and %d different? %@", 23, 24, boolString(areTheyDifferent));
  31. return 0;
  32. }

在C语言中,默认非0就是yes,但是从上面的代码可以看出,23-24 == -1,此时应该返回YES的,但是运行结果如下:

主要原因是Objective-C中YES被define为1,并不是非0,在代码的编写过程中,这一点一定要注意。

来自为知笔记(Wiz)

时间: 2024-10-07 02:28:18

ObjectC中的BOOL类型的相关文章

object-c中的BOOL类型

object-c中的布尔类型比C语言中的bool类型早了10年,它具有YES和NO两种值.在object-c中的布尔类型BOOL实际上是一种带符号的字符类型(signed char),它使用的空间是1byte,即8bit,其中YES定义为1,NO定义为0.将大于1字节的整形数(比如short或者int)赋给BOOL变量,会被截断处理,只保留末尾的8个bit. 以下是object-c中使用BOOL类型的例子: #import <Foundation/Foundation.h> //比较两个int

黑马程序员----OC中含有BOOL类型

一.BOOL类型 OC中有布尔类型 BOOL(C语言中没有布尔类型) 二.BOOL类型的本质 typedef signed char BOOL; 三.BOOL类型的取值范围 BOOL类型的变量又2种取值:YES .NO #define YES (BOOL)1 #define NO (BOOL)0 四.代码练习: 运行结果:

Python中的bool类型

Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 while 语句中应用 这边需要注意的是,python中,bool是int的子类(继承int),故 True==1  False==0 是会返回Ture的,有点坑,如要切实判断用 xxx is True 1 print(True==1) # 返回True 2 print(False==0) # 返回True

解决用Jquery实现 Checkbox 显示后台Bool类型数据时出现的Bug

最近在进行一个EasyUI框架的搭建过过程中,需要把数据库中的Bool类型用Checkbox来显示,开始写的是 $("chkIsMech").checked=Json.IsMenu, 后来又试了$("#chkIsMenu").attr("checked", json.IsMenu);同样不行.又百度了好多,终于有篇文章出现了同样的问题,欣喜之余赶紧粘过来: document.getElementById("chkIsMenu"

bool和BOOL类型知识集合

知识点一.C语言中有bool类型吗? 转自http://blog.csdn.net/liuqiqi677/article/details/6703615 之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C++了,一直觉得bool这种基本类型,应该是C语言内置的类型,怎么会没有定义呢?事实证明,我的想法完全错误了. 有了网络,一切问题都变得那么容易了

c语言中有自己的bool类型

有人说c语言中没有bool类型,只有c++中有,果真如此? 先看没有bool类型时,c中表示bool类型的方法: 1. typedef int bool; #define false 0 #define true 1 2. typedef int bool; enum { false, true }; 3. typedef enum { false, true }bool; 简单实例如下: #include <stdio.h> //1 //typedef int bool; //#define

c++中istream类型到bool类型的隐式转换

事情的起因是见到了这种用法: while(cin>>m>>n&&m&&n) { } 现在分析一下,cin>>m>>n返回的是一个对istream类型的引用,然后这个返回值又与m做&&运算.已知这种写法是合法的. 可能有两种情况:(1)&&运算符被重载,允许接收istream类型的值. (2)istream类中有成员能将istream类型转换为bool类型. 翻看手册,发现是第二种情况.http:

一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)

各位看官们,大家好,上一回中咱们说的是控制终端字符颜色的例子,这一回咱们说的例子是:C语言中的布尔–bool类型 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,在数字电路中我们经常会遇到布尔类型,其实在编写软件的过程中也会使用布尔类型.布尔类型的变量只有两种值:真和假.在实际的编程过程中,我们经常定义宏,然后使用1表示真,0表示假.下面是具体的例子: #define TRUE 1 #define FALSE 0 例子中定义了两个宏,一个是TRUE,它的值是1,表示真:另外一个是F

拼接json时小心C#中bool类型转化

C#中bool类型的值,在ToString时会有如下转化:true—>Ture ; false—>False这是拼接到json串中就会出现如下结果:{ "no": "001", "name": "yueye", "age": 32, "isStudent": True } 这种数据在android中进行解析,没有出现什么问题(没有详细进行了解)但是在ios中进行解析的话,无法