Синтаксис ([thevent modifierFlags] & NSCommandKeyMask) неясен - PullRequest
1 голос
/ 20 марта 2012

Я не совсем понимаю следующий код. Разве NSCommandKeyMask не является фиксированным целым числом?

Тогда не является ли вторая часть условия всегда верной? Например, не то же самое: ([theEvent modifiedFlags] & 1)

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

спасибо

Ответы [ 2 ]

1 голос
/ 20 марта 2012

& не является логическим и, но побитовым, и он проверяет, что этот же бит включен и в [theEvent modifierFlags].

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

Кроме того, хотя NSCommandKeyMask является константойего значение может измениться за один день (в другой версии), поэтому вы не должны использовать 1 в любом случае.

0 голосов
/ 20 марта 2012

Это действительно так - но я думаю, что вы путаете логическое значение и оператор с побитовым и оператором. Здесь они выполняют побитовую операцию на modifierFlags. Подробнее здесь .

По сути, он выполняет вычисления для каждой отдельной двоичной цифры. В случае & это приводит к 1, если обе цифры равны 1, и 0 в противном случае. Пример:

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

modifierFlags устанавливает каждое двоичное место на основе некоторого флага модификатора, тогда каждая маска содержит один в своем соответствующем месте. Таким образом, выполнение этой операции приводит к 0, если этот флаг не установлен, и к некоторому ненулевому значению, если этот флаг установлен . Вот почему это если утверждение работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...