ios中BOOL和bool的区别

发布网友 发布时间:2022-04-22 03:39

我来回答

2个回答

热心网友 时间:2023-10-01 21:30

  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.

热心网友 时间:2023-10-01 21:31

  说明: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(比如60,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。

  举例:

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

  bool b2=60;//实际是true,因为bool类型,非0即为true。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com