2012-03-20 5 views
0

次のコードを完全に理解できません。 NSCommandKeyMaskは固定された整数ではありませんか?([theEvent modifierFlags]&NSCommandKeyMask)の構文が明確でない

次に条件の第2部分は常に真ではありませんか?例えば、に同じ しない。([theEvent modifiedFlags] & 1)

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

おかげ

答えて

0

これは絶対にありますが、あなたはブール演算子と演算子をビット演算子と混同していると思います。ここでは、彼らはmodifierFlagsでビット単位の操作を実行しています。続きを読むhere

基本的には、それぞれの2進数の計算を実行します。 &の場合は、両方の数字が1の場合は1、そうでない場合は0となります。例:

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

modifierFlagsセットいくつかの修飾フラグに基づいて、各バイナリの場所、各マスクは、その適切な場所に単一のものを含んでいます。したがって、この操作を実行すると、そのフラグが設定されていない場合は0、そのフラグがの場合は0以外の値が設定され、になります。それがif文が機能する理由です。

+0

では、CMDとSHIFTの両方が同時に押されているかどうかを確認するとどうなりますか? – aneuryzm

+0

'([theEvent modifierFlags]&NSCommandKeyMask)&&([theEvent modifierFlags]&NSShiftKeyMask)'をチェックする必要があります。 – andyvn22

1

&、同じビットが同様[theEvent modifierFlags]内にあることを確認し、論理とが、ビット単位ではなく、。

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

NSCommandKeyMaskが一定であるがまた、その値は(異なるバージョンで)1日を変更することがありますので、とにかく1を使用しないでください。

関連する問題