Как использовать перечисления с битовыми флагами

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан Oysio 19 August 2010 в 17:14
поделиться

1 ответ

Да, используйте поразрядное ИЛИ ( | ) для установки нескольких флагов:

ColorType pinkColor = kWhite | kRed;

Затем используйте поразрядное И ( & ), чтобы проверить, установлен ли флаг установлено:

if ( pinkColor & kRed )
{
   // do something
}

Результат & имеет какой-либо установленный бит, только если один и тот же бит установлен в обоих операндах . Поскольку единственный бит в kRed - это бит 1, результатом будет 0, если для другого операнда также не установлен этот бит.

Если вам нужно узнать, установлен ли конкретный флаг как BOOL , а не просто сразу проверить его в условии if , сравните результат побитового И с проверенным бит:

BOOL hasRed = ((pinkColor & kRed) == kRed);
33
ответ дан 28 November 2019 в 21:34
поделиться