美文网首页
布尔值类型使用BOOL 和 bool哪个更好

布尔值类型使用BOOL 和 bool哪个更好

作者: AZander | 来源:发表于2019-03-04 16:43 被阅读0次

    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
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:布尔值类型使用BOOL 和 bool哪个更好

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