Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 当dec不是0时,为什么0xF00解释为否_Objective C_Cocoa - Fatal编程技术网

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
变量失败时工作。