iphone - 在 Objective-c 中,比较 2 个 BOOL 值的安全和好方法?

标签 iphone objective-c boolean compare

我想比较 objective-c 中的 2 个 BOOL 值。

我发现以下代码的 (3)-(6) 有效。
(1)-(2) 不起作用,因为 BOOL 只是 signed char

(3) 有效且可读性强,但我认为 bool 不是 objective-c。
在 objective-c 代码中使用 bool 好吗?

在 objective-c 中比较 2 个 BOOL 值的安全和好方法是什么?
还有其他更好的比较方法吗?

BOOL b = YES;
BOOL c = 2;

NSLog(@"(1) %d", b == c); // not work
NSLog(@"(2) %d", (BOOL)b == (BOOL)c); // not work
NSLog(@"(3) %d", (bool)b == (bool)c);
NSLog(@"(4) %d", !b == !c);
NSLog(@"(5) %d", !!b == !!c);
NSLog(@"(6) %d", (b != 0) == (c != 0));

结果:

(1) 0
(2) 0
(3) 1
(4) 1
(5) 1
(6) 1

最佳答案

比较两个 boolean 值应该用异或运算来处理。

试图直接比较两个 boolean 值是对 boolean 代数基础知识的误用: http://en.wikipedia.org/wiki/Boolean_algebra_(logic)

当你在做的时候

BOOL a = (b == c);

那么即使 b 和 c 都为真,这个值也可能返回假。但是,如果 b 和 c 都为真,即大于 0,则表达式 b && c 将始终返回 YES,否则返回 NO。

相反,这是您实际尝试做的事情:

BOOL xor = b && !c || !b && c;
BOOL equal = !xor;

等同于

BOOL equal = !(b && !c || !b && c);

BOOL equal = (b && c) || (!b && !c)

如果您必须花时间确保您的 BOOL 值被规范化(即设置为 1 或 0),那么您做错了什么。

关于iphone - 在 Objective-c 中,比较 2 个 BOOL 值的安全和好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134352/

相关文章:

objective-c - NSTextAttachmentCell 是一英里高

ios - 如何为一个键存储多个值?

c - bool 的 printf 格式说明符是什么?

java - 在数组中搜索特定字符串

iphone - UISearchBar 与 iOS7 中 UITableView header 中的 UISearchDisplayController 链接

iphone - 如何在 Objective-c 中以编程方式将文本保存为图像文件?

iphone - NSMutableArray 索引删除

ios - 如何使 UIButton 随 UIScrollView 一起移动

iphone - AudioFileReadBytes错误

boolean - 将 Variant 转换为 bool