我不完全理解以下代码。 NSCommandKeyMask不是固定的整数吗?
那么条件的第二部分总是不正确吗?
例如,与([theEvent modifiedFlags] & 1)
if ([theEvent modifierFlags] & NSCommandKeyMask) {
NSLog(@"Alt key Down (again)!");
}
感谢
答案 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语句有效的原因。