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

Objective c ([theEvent modifierFlags]&NSCommandKeyMask)的语法不清楚,objective-c,Objective C,我不完全理解以下代码。NSCommandKeyMask不是一个固定的整数吗 那么,条件的第二部分不总是正确的吗? 例如,与以下内容不同:([theEvent modifiedFlags]&1) 谢谢&不是逻辑and,而是按位and,它会检查[theEvent modifierFlags]中是否有相同的位 1 & 1 == 1 (true) 3 & 1 == 1 (true) 2 & 1 == 0 (false) 此外,尽管NSCommandKeyMask是一个常量,但它

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

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


谢谢

&
不是逻辑and,而是按位and,它会检查
[theEvent modifierFlags]
中是否有相同的位

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

此外,尽管
NSCommandKeyMask
是一个常量,但它的值可能会在某一天发生变化(在不同的版本中),因此无论如何都不应该使用
1

&
不是逻辑and,而是按位and,它会检查
[theEvent modifierFlags]
中是否有相同的位

1 & 1 == 1 (true)
3 & 1 == 1 (true)
2 & 1 == 0 (false)
另外,尽管
NSCommandKeyMask
是一个常量,但它的值可能会在某一天发生变化(在不同的版本中),因此无论如何都不应该使用
1

这绝对是一个常量,但我认为您将布尔and运算符与按位and运算符混淆了。在这里,它们对
modifierFlags
执行逐位操作。阅读更多

基本上,它对每个二进制数字进行计算。在
&
的情况下,如果两个数字都是
1
,则生成
1
,否则生成
0
。例如:

    0101 (decimal 5)
AND 0011 (decimal 3)
  = 0001 (decimal 1)
modifierFlags
根据某个修改器标志设置每个二进制位置,然后每个掩码在其相应位置包含一个。因此,如果未设置该标志,则执行该操作将导致0,如果设置该标志,则会导致一些非零值。这就是if语句起作用的原因。

绝对是这样——但我认为您把布尔and运算符与按位and运算符混淆了。在这里,它们对
modifierFlags
执行逐位操作。阅读更多

基本上,它对每个二进制数字进行计算。在
&
的情况下,如果两个数字都是
1
,则生成
1
,否则生成
0
。例如:

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

modifierFlags
根据某个修改器标志设置每个二进制位置,然后每个掩码在其相应位置包含一个。因此,如果未设置该标志,则执行该操作将导致0,如果设置该标志,则会导致一些非零值。这就是为什么if语句有效。

我明白了。那么,如果我应该检查是否同时按下CMD和SHIFT呢?您需要检查
([theEvent modifierFlags]&NSCommandKeyMask)&([theEvent modifierFlags]&NSShiftKeyMask)
。我明白了。那么,如果我应该检查例如是否同时按下CMD和SHIFT呢?您需要检查
([theEvent modifierFlags]&NSCommandKeyMask)&([theEvent modifierFlags]&NSShiftKeyMask)