OC的BOOL类型

Treat Warnings as Errors   Yes/No
如果为Yes,那么编译器会将警告当做错误,即只要有警告,那么编译器就不会通过。
OC中的BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间。
YES定义为1,而NO定义为0(使用#define)。
OC并不将BOOL作为仅能保存YES或NO值的真正的布尔类型来处理。编译器将BOOL认做8位二进制数,YES和NO值只是一种约定。这引发了一个小问题:如果一不小心将一个长于1字节的整形值赋值给一个BOOL类型的变量,那么只有低位字节会用作BOOL值(8960,写成十六进制为0x2300),那么BOOL值将会是0,这里取的是它的低8位00。
经验丰富的C程序员或许会直接写成  return num1-num2;来返回bool类型,但是在OC中是行不通的,因为
OC中BOOL值只取两个值,一个是0x00 ,一个是0x01,它只是char类型的一个很小的子集。
如果值在char中,但是不是0x00或者0x01

//BOOL类型的变量,有一个字节的空间,所以除了YES(1) NO(0),之外还能存很多数,所以BOOL类型和char类型一样,都可以当做范围比较小的整数来用。

        //YES/NO 并不是真正意义上的真和假,OC中仍然是按照0为假,非0为真的规则进行判断真假的,只不过多了一个定义的YES/NO让我们使用而已,只是为了使程序看起来好看些罢了。

        //YES/NONO是真正的假,但是YES并不代表所有为真的值

        //BOOL类型和C语言中的区别,只是多了一个YES/NO的宏定义而已,YES只是约定的真,并不是实际情况的真

        //

        int a = 3;

        int e = 5;

        char c = 0x10;

        BOOL b = c;

        b= b-c;

        NSLog(@"%d",func(a, e));

        NSLog(@"%d",b);

        if (c) {

            NSLog(@"adf");//输出成功

        }

        if (b) {

            NSLog(@"adf3");//输出成功

        }

        if(c==YES)

        {

            NSLog(@"adeedg");//输出不成功

        }

        NSLog(@"%d",b);

总结:绝对不要将BOOL值和YES比较。直接和NO比较则一定安全,因为C语言中得假值就是0。
碰到要和YES比较的时候,可以用比较NO,然后在else里面写为真的情况,就避免了和YES比较的情况。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值