美文网首页
OC中BOOL和bool的区别

OC中BOOL和bool的区别

作者: Idoahc | 来源:发表于2017-03-20 15:13 被阅读559次

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。

相关文章

  • OC 中 BOOL 和 bool 的区别

    说明: 最近在写OC时被问到,为什么我用true/false而不用YES/NO。原因是之前写其他语言时养成了习惯,...

  • OC中BOOL和bool的区别

    OC中的BOOL类型占用了一个字节,即是8位进行表示。8位全是0时即是NO,8位之内非0的就是YES,如果整数超过...

  • OC 中的BOOL与bool的区别

    1.BOOL与bool的区别 bool 是0和1 分别对应 -> false/true BOOL 是...

  • BOOL和bool的区别

    一、1、类型不同BOOL为int型bool为布尔型2、长度不同bool只有一个字节BOOL长度视实际环境来定,一般...

  • ios中BOOL和bool的区别

    ios中BOOL和bool的区别 说明:objective-c 中的BOOL 实际上是一种对带符号的字符类型(si...

  • ios中BOOL和bool的区别

    ios中BOOL和bool的区别说明:objective-c 中的BOOL 实际上是一种对带符号的字符类型(sig...

  • OC中BOOL和bool遇到的坑

     抛出问题:今天在做业务的时候,用到了键值编码(KVC赋值)来访问要存取的类的属性的setValue:forKey...

  • iOS中BOOL跟bool的区别

    起因 在技术群里发现有人在问 这一段会输出什么,问这个的原因是他看到博客上都说是输出a no b yes,但是自己...

  • BOOL/bool/Boolean的区别

    学iOS开发算起来应该是一年多的,但是在平常使用布尔值的时候总是随便一用,只知道它们就只有两种值1或者0而已,并没...

  • 基本数据类型的有关概念

    bool和BOOL的区别 说明:Objective-C 中的BOOL 实际上是一种对带符号的字符类型(signed...

网友评论

      本文标题:OC中BOOL和bool的区别

      本文链接:https://www.haomeiwen.com/subject/vgtinttx.html