OC 中的BOOL与bool的区别

2019-08-23  本文已影响0人  快乐捣蛋鬼

1.BOOL与bool的区别

bool boolA = 1;
bool boolB = 0;
bool boolC = 256;
bool boolD = -1;
bool boolE = 13;


BOOL BOOLA = 1;
BOOL BOOLB = 0;
BOOL BOOLC = 256;
BOOL BOOLD = -1;
BOOL BOOLE = 13;


NSLog(@"boolA = %d",boolA);
NSLog(@"boolB = %d",boolB);
NSLog(@"boolC = %d",boolC);
NSLog(@"boolD = %d",boolD);
NSLog(@"boolE = %d",boolE);

NSLog(@"===========");

NSLog(@"BOOLA = %d",BOOLA);
NSLog(@"BOOLB = %d",BOOLB);
NSLog(@"BOOLC = %d",BOOLC);
NSLog(@"BOOLD = %d",BOOLD);
NSLog(@"BOOLE = %d",BOOLE);

结果输出为:

boolA = 1  // true
boolB = 0  // false
boolC = 1  // true
boolD = 1  // true
boolE = 1  // true
===========
BOOLA = 1  // YES
BOOLB = 0  // NO
BOOLC = 0  // NO
BOOLD = -1  // YES
BOOLE = 13  // YES

由以上结果可看出:bool的结果只有两个:0和1。除了0是0,其他任意数字都是1,没有大小限制。
BOOL的范围为8位二进制数字,如果超出了8位,就截取后8位。当8个位置上都为0时,返回0,所以0会返回0,256会返回0,但是257会返回1,因为只截取后8位。


2.使用事项

DO NOT COMPARE TO YES

在条件判断语句中,不要直接使用x == YES,或x != YES这种写法


而要直接使用if (hasXXX) 或 if (isXXX) 这种写法

还有就是避免将大于一个字节(8位二进制)的值赋值给BOOL类型的变量,如BOOL a = 256

参考:
BOOL’s sharp corners
[Objc 中 “== YES” 的愚蠢行为有多可怕]
(https://www.jianshu.com/p/75b88d2a0380)
is-there-any-difference-between-bool-boolean-and-bool-in-objective-c
iOS中BOOL跟bool的区别

上一篇 下一篇

猜你喜欢

热点阅读