2012-03-20 81 views

回答

0

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

基本上,它对每个单独的二进制数字执行计算。在&的情况下,如果两个数字都是10,则结果为1。例如:

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

modifierFlags集基于一些改性剂标志每个二进制位,然后将每个掩码包含在其适当位置的单独一个。因此,如果该标志未被设置,则执行该操作的结果为0,并且如果该标志被设置为的值为,则一些非零值。这就是为什么if语句有效。

+0

我明白了。那么,如果我应该检查例如CMD和SHIFT是否同时被按下呢? – aneuryzm 2012-03-20 11:10:25

+0

你需要检查'([theEvent modifierFlags]&NSCommandKeyMask)&&([theEvent modifierFlags]&NSShiftKeyMask)''。 – andyvn22 2012-03-20 11:52:00

1

&是不是逻辑和,但按位与,它会检查相同的比特是在[theEvent modifierFlags]为好。

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

此外,虽然NSCommandKeyMask是一个常数,其数值可能会改变一天(在不同版本),所以你不应该使用1反正。