- 使用bool(true、false),BOOL(YES、NO) 不好用,原因见:参考 https://www.jianshu.com/p/1ee039a4f63b
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。
作者:SuperDi
链接:https://www.jianshu.com/p/1ee039a4f63b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
网友评论