当dec不为0时,为什么0xF00被解释为NO

时间:2016-12-03 22:33:10

标签: objective-c cocoa

我发现了

BOOL x = (BOOL)0xF00;

NO ...值0xF00非零,但结果仍为NO

但这打破了我的范例,BOOL应该起作用

NO == 0, YES == any other value

为什么会那样?这是否意味着检查

if (object) {}

不安全吗?

2 个答案:

答案 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;