Objective-C if语句处理 BOOL值不为1和0的情况

BOOL ,布尔值,在Objective-C ,BOOL类型被typedef为signed char(有符号的整型),YES被#define为1,NO被#define为0。
事实上,xcode的编译器仍然会把BOOL值看成8位二进制数,所以,如果BOOL值被赋值为非1和0,那么xocde的判断语句if会怎样处理呢?传进去的数值超过八位(short 或者int)又会怎么处理呢?
如果把超过八位的二进制数值传给BOOL,xcode会警告说数值会被转换成相应的8位数值,其实就是只处理低八位二进制数值:

        
        
        
                  图 : xcode警告数值被转换

编译运行测试程序得出的结果就是只有低八位的二进制数值全部为0(NO)时xcode的if语句才会判断为假,其它情况,即非0(NO)都为真。但是在Objective-C中只有1才代表YES,如果运行

    BOOL yes_or_no = 0xff70;
    if (yes_or_no == YES ) {
        NSLog(@"yes");
    }else
    {
        NSLog(@"no");
    }

yes_or_no 的值为:112(被xcode转换为8位),这时打印结果为no;

posted on 2016-12-22 11:09  士多啤梨苹果橙  阅读(1664)  评论(0编辑  收藏  举报

导航