BOOL的赋值

来源:互联网 发布:斧声烛影 知乎 编辑:程序博客网 时间:2024/06/06 02:53

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(比如256,写成十六进制为0x10),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。
举例:
BOOL a;
a = 256;
NSLog(@”%@”,a?@”YES”:@”NO”);
结果:NO
实际上:因为bool类型,非0即为true。但是将256的倍数赋值给BOOL,都将得到结果NO;

0 0
原创粉丝点击