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位数值,其实就是只处理低八位二进制数值:

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

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

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

                  图 : 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;

上一篇:sun.proxy.$Proxy0 cannot be cast to dao.impl.MyAdviceImpl


下一篇:卷积神经网络CNN与深度学习常用框架的介绍与使用