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

标签 objective-c cocoa

我发现

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/

相关文章:

cocoa - 如何再次调用 awakeFromnib ,我正在使用 setNeedsDisplay ,它不起作用

iphone - 关系中的核心数据总和

objective-c - 有时我想阻止我的 Cocoa 应用程序启动,如何在 init 中阻止它?

iphone - Objective-C程序收到信号: "EXC_BAD_ACCESS" push notifications

objective-c - 当 enitiy 添加到核心数据时更新 NSTableView

cocoa - NSWindow 和 NSTableView 单元格 View 中的文本平滑

objective-c - "Format string is not a string literal (potentially insecure)"

ios - 在 WatchKit 中将对象堆叠在彼此之上

objective-c - 如何替换 NSString 中出现的\xa0 字符

iphone - 如果 NSString stringWithContentsOfFile 已被弃用,那么它的替代品是什么?