Objective c 当dec不是0时,为什么0xF00解释为否
我发现Objective c 当dec不是0时,为什么0xF00解释为否,objective-c,cocoa,Objective C,Cocoa,我发现 BOOL x = (BOOL)0xF00; 是否。。。值0xF00非零,但结果仍然是NO 但这打破了我的模式,布尔应该作为 NO == 0, YES == any other value 为什么会这样?这是否意味着 if (object) {} 是否不安全?BOOL定义为有符号字符,即8位。但是0xF00需要超过8位。因此编译器采用的是最低的8位,其值为0。当我尝试时,编译器会特别警告此问题: warning: implicit conversion from 'int' to '
BOOL x = (BOOL)0xF00;
是否
。。。值0xF00
非零,但结果仍然是NO
但这打破了我的模式,布尔应该作为
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
变量分配任意值,那么您的范例需要说明值是如何表示的。强制转换为一个一字节的值,截断所有较高的位。。。但是你可以这样做
BOOL boolyValue = !!0xffff00;
\u Bool
是这样工作的,但Bool
不是这样的。另请看:诚恳地说,为什么苹果三年前在iOS上解决了这个问题,但在macOS上却没有解决?这对我来说没有意义。这是否意味着检查if(object){}
不安全?如果你想检查object
是否为nil,它是安全的,因为if
检查的工作方式不同。但是编写if(object!=nil){}
更为清晰。首先,它不使用BOOL
变量。if
检查它的内容是否与0
不同,所以是的,它在BOOL
变量失败时工作。