Objective-C 中的BOOL ---未完成待续

本文详细解读Objective-C中的BOOL类型,包括其定义、赋值、真假判断以及与bool类型的区别,并通过实例展示了如何使用BOOL类型进行质数判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在objc.h 中,BOOL 定义为:

  1. typedef signed char BOOL;  
  2.   
  3. #define YES      (BOOL) 1  
  4. #define NO       (BOOL) 0  
从上面的定义我们发现布尔变量的值为 YES/NO,或 1/0 。YES 或 1 代表真,NO 或 0 代表假。比如你定义了一个布尔变量并赋了值:
  1. BOOL enabled = NO;  
  2. enabled = 0;  
判断BOOL值为YES:
  1. if(enabled == YES){  
  2.   
  3. }  
或者YES可以省略
  1. if(enabled){  
  2.   
  3. }  
判断BOOL值为NO:
  1. if(!enabled){  
  2.   
  3. }  
或者
  1. if(enabled != YES){  
  2.   
  3. }  
例子:

判断一个数是否是质数,是就返回YES,不是则返回NO。

  1. - (BOOL)isPrime:(int num){//算法请读者自己去琢磨,看不懂需要解释的请留言  
  2.     forint i = 2; i< num/2 ; i++){  
  3.             if( num%i == 0){  
  4.                             return NO;  
  5.             }  
  6.     }  
  7.     return YES;  
  8. }  

这两个类型是有区别的:

BOOL的值,只取最高位做判断,比如,5的2进制是0x101,对BOOL来说是YES,4的2进制是0x100,对BOOL来说是NO

不过好像指针不用遵守这个规则

bool的值,直接取0和非0。


boolean_t t1 = 1;//int type
Boolean t2 = 1; //unsigned char type
BOOL t3 = 4;//YES or NO
bool t4 = 1;//true or false

NSAssert(t1, @"boolean_t t1 is NO");//通过测试
NSAssert(t2, @"boolean_t t2 is NO");//通过测试
NSAssert(t3, @"boolean_t t3 is NO");//通过测试
NSAssert(t4, @"boolean_t t4 is NO");//通过测试
屏幕快照-2013-01-09-10.48.40-AM.png


说明: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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值