([theEvent modifierFlags]& NSCommandKeyMask)的语法不清楚

时间:2012-03-20 10:51:24

标签: objective-c

我不完全理解以下代码。 NSCommandKeyMask不是固定的整数吗?

那么条件的第二部分总是不正确吗? 例如,与([theEvent modifiedFlags] & 1)

不同
if ([theEvent modifierFlags] & NSCommandKeyMask) {
    NSLog(@"Alt key Down (again)!");
}

感谢

2 个答案:

答案 0 :(得分:1)

&不是逻辑的,而是一个按位,它会检查[theEvent modifierFlags]中的同一位是否已打开。

1 & 1 == 1 (true)
3 & 1 == 1 (true)
2 & 1 == 0 (false)

此外,尽管NSCommandKeyMask是常量,但其值可能会在一天内更改(在不同的版本中),因此您不应该使用1

答案 1 :(得分:0)

绝对是 - 但我认为你将布尔和运算符与按位和运算符混淆。在这里,他们在modifierFlags上执行按位操作。阅读更多here

基本上,它对每个二进制数字执行计算。对于&,如果两个数字都为1,则结果为1,否则为0。例如:

    0101 (decimal 5)
AND 0011 (decimal 3)
  = 0001 (decimal 1)

modifierFlags根据某个修饰符标志设置每个二进制位置,然后每个掩码在其适当的位置包含一个。因此,如果未设置该标志,则执行此操作将导致0,如果该 设置,则执行某些非零值。这就是if语句有效的原因。