我发现了
BOOL x = (BOOL)0xF00;
是NO
...值0xF00
非零,但结果仍为NO
但这打破了我的范例,BOOL应该起作用
NO == 0, YES == any other value
为什么会那样?这是否意味着检查
if (object) {}
不安全吗?
答案 0 :(得分:4)
BOOL
被定义为有符号字符,即8位。但0xF00
需要超过8位。所以编译器采用最低的8位,其值为0.当我尝试它时,编译器专门警告这个问题:
warning: implicit conversion from 'int' to 'BOOL' (aka 'signed char') changes value from 3840 to 0 [-Wconstant-conversion]
如果您要为BOOL
变量分配任意值,那么您的范例需要考虑如何表示值。
答案 1 :(得分:1)
转换为一个字节值,截断所有更高位......你可以这样做......
BOOL boolyValue = !!0xffff00;