我发现
BOOL x = (BOOL)0xF00;
是NO
...值0xF00
不为零,但结果仍然是NO
但这打破了我的范式,BOOL 应该作为
NO == 0, YES == any other value
为什么会这样?这是否意味着检查
if (object) {}
不安全吗?
最佳答案
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
变量分配任意值,那么您的范例需要考虑值的表示方式。
关于objective-c - 当 dec 不为 0 时,为什么 0xF00 被解释为 NO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953223/