ios中BOOL和bool的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios中BOOL和bool的区别相关的知识,希望对你有一定的参考价值。

  BOOL和bool
  1、类型不同
  bool为布尔型用作逻辑判断
  BOOL在<windef.h>typedef int BOOL;
  在<wtypes.h>typedef long BOOL;
  2、长度不同
  bool只有一个字节
  BOOL长度视实际环境来定,一般可认为是4个字节
  3、取值不同
  bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。
  如果数个bool对象列在一起,可能会各占一个Byte,这取决于编译器。
  BOOL是微软定义的typedef int BOOL(在windef.h中)。与bool不同,它是一个三值逻辑,
  TRUE/FALSE/ERROR,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。
  Win32 API中很多返回值为BOOL的函数都是三值逻辑。比如GetMessage().
  BOOL GetMessage(
  LPMSG lpMsg, // message information
  HWND hWnd, // handle to window
  UINT wMsgFilterMin, // first message
  UINT wMsgFilterMax // last message);
  If the function retrieves a message other than WM_QUIT, the return value is nonzero.
  If the function retrieves the WM_QUIT message, the return value is zero.
  If there is an error, the return value is -1.
参考技术A   说明:objective-c 中的BOOL 实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。

  注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。

  问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。

  举例:

  BOOL b1=8960; // 实际是 NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO

  bool b2=8960;//实际是true,因为bool类型,非0即为true。本回答被提问者采纳

iOS开发——语法OC篇&BOOL / bool / Boolean / NSCFBoolean四者区别

NameTypedefHeaderTrue ValueFalse Value
BOOL signed char objc.h YES NO
bool _Bool (int) stdbool.h true false
Boolean unsigned char MacTypes.h TRUE FALSE
NSNumber __NSCFBoolean Foundation.h @(YES) @(NO)
CFBooleanRef struct CoreFoundation.h kCFBooleanTrue

以上是关于ios中BOOL和bool的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发——语法OC篇&BOOL / bool / Boolean / NSCFBoolean四者区别

C中_Bool和bool类型的区别?

BOOL和bool的区别

BOOL和bool的区别

Objective-C 中的 bool、Boolean 和 BOOL 之间有啥区别吗?

java布尔类型变量bool,判断 true ==bool与bool==true区别