OC中的BOOL类型占用了一个字节,即是8位进行表示。8位全是0时即是NO,8位之内非0的就是YES,如果整数超过8位,不一定是YES。比如10位,后8位全是0,前两位非0,这个时候就是NO。
比如
BOOL bo = 8960;
if(bo)
return YES:
else
return NO;
这个时候返回的是NO。
总结:
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。
=================更新=分割线=2019/11/14=================
以上是在32位iOS、Mac OS上的情况。
BOOL的定义,在64位的ios和32位ios、mac os,定义是不一样的。在64位ios中,它就是一个bool类型;在32位ios、mac os中,则是一个8位带符号的字符类型。
BOOL的值也有2种情况,在64位ios,就是YES和NO, 在32位ios、mac os,1表示YES,其他表示NO
感谢思考搜索决策勇敢朋友的指正