逻辑运算符如何使用目标c中的常量操作数

iMa*_*ash 1 iphone objective-c reachability ios5

我正在开发项目,我在其中一个类中使用checkInternet方法来验证Internet可用性.在那个方法中,我有以下代码:

对于以下代码行,我收到警告," 对于此代码块使用Logical && with constant operand" (flag && kSCNetworkFlagsReachable).

BOOL isavailable = NO;
Boolean success;
isavailable = success && (flag && kSCNetworkFlagsReachable) && !(flag & kSCNetworkFlagsConnectionRequired);
Run Code Online (Sandbox Code Playgroud)

并作为一个解决方案xcode给出选项"使用&为按位操作数",这很好,我这样做,它删除了我的警告.但我想知道它是如何工作的逻辑运算符?为什么它告诉我改为按位?

Nic*_*idt 5

位运算符 &将每个单独的对位.仅当左右操作数至少有一个匹配位设置为1时,结果才为非null.

示例:0100 AND 0010→0000但0110和0010→0010.

此运算符允许您使用单个整数值到几个布尔值存储在不同的位,然后使用第二个值(称为掩模)至位进行筛选.

kSCNetworkFlagsReachable等于1<<1(2).因此,flag & kSCNetworkFlagsReachable仅当第二个最低有效位flag设置为1 时才成立.

使用&&而不是&一个常见的错误.编译器将尝试检测该错误.在您的示例中,kSCNetworkFlagsReachable是一个常量值.由于kSCNetworkFlagsReachable是常数且始终如一,测试是否flag && kSCNetworkFlagsReachable为真与测试是否flag为真相同.因此,您不太可能真的想在逻辑运算中使用常量值.这就是编译器发出警告的原因.