Я хочу проверить значение флага, когда у меня есть только значения ints:
Поэтому, когда у меня есть int x = 54
это означает, что это 0110110, НО я делаю декларативные пользовательские действия sharepoint без возможности создания кода флага и т.д. Я могу делать простые выражения без использования перечислений.
Итак, теперь я получаю день int monday = 32
,
поэтому мой вопрос:
Как я могу проверить, что у 54 есть флаг 32, это может быть математический путь или простой алгоритм с простой петлей
ОБНОВИТЬ:
ссылается на Эндрю Уитакера
идет с ошибкой
Не удалось перевести выражение '(workDaysValueInt & 32) == 32' из-за следующей ошибки: логические операции допускают только булевы типы данных.
'
Смешно, что когда я использую необработанные данные, например (54 и 32) == 32, у него нет ошибок вообще
Если я правильно понимаю, вы должны иметь возможность использовать побитовое &
и сравнивать результат с днем недели, который вы проверяете:
int Monday = 32;
int days = 54;
bool hasMonday = (days & Monday) == Monday;
Вот как это выглядит:
110110
& 100000
-------
100000
Причина это работает, когда вы используете целые значения в качестве флагов (и объединения флагов с помощью побитового |
), в результате &
операции со значением флага даст то, что вы &
та с, если она содержит этот флаг, в смысл, зачищающий другую информацию, содержащуюся в значении.