Objective c ([theEvent modifierFlags]&NSCommandKeyMask)的语法不清楚
我不完全理解以下代码。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是一个常量,但它
([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)
。