Использование битового флага с перечислениями.NET

Как MATLAB поддерживает битовые операции на System.Enum

Много языков.NET поддерживают битовые операции на перечислениях, заданных с атрибутом System.Flags. Язык MATLAB® не начинает эквивалентные операции, и, поэтому, обеспечивает методы экземпляра для выполнения битовых операций на объекте перечисления. Поразрядными методами является bitand, bitnot, bitor и bitxor.

Перечисление может задать немного флага. Немного флага позволяет вам создать экземпляры перечисления, чтобы сохранить комбинации значений, заданных участниками. Например, файлы и папки имеют атрибуты, такие как Archive, Hidden и ReadOnly. Для данного файла выполните операцию на основе одного или нескольких из этих атрибутов. С побитовыми операторами можно создать и протестировать на комбинации.

Чтобы использовать побитовые операторы, перечисление должно иметь:

  • Атрибут Flags. В Версии 4 Среды эти перечисления также имеют метод HasFlag.

  • Значения, которые соответствуют степеням 2.

Создание.NET Перечисляемые битовые флаги

Используйте пример MATLAB, перечисление NetDocEnum.MyDays, в следующих примерах.

Предположим, что у вас есть следующие запланированные действия:

  • В понедельник — Отдел, встречающийся в 10:00

  • В среду и в пятницу — Обсуждение в команде в 2:00

  • В четверг — Ночь шара залпа

Можно объединить участников перечисления MyDays, чтобы создать переменные MATLAB с помощью метода bitor, который соединяет двух участников. Например, чтобы создать переменный teamMtgs дней обсуждения в команде, введите:

teamMtgs = bitor(...
    NetDocEnum.MyDays.Friday,...
    NetDocEnum.MyDays.Wednesday);

Создайте переменный allMtgs всех дней со встречами:

allMtgs = bitor(teamMtgs,...
    NetDocEnum.MyDays.Monday);

Чтобы видеть, какие дни принадлежат каждой переменной, введите:

teamMtgs
allMtgs
teamMtgs = 
Wednesday, Friday

allMtgs = 
Monday, Wednesday, Friday

Удаление флага от переменной

Предположим, что ваш менеджер отменяет встречу в среду на этой неделе. Чтобы удалить Wednesday из переменной allMtgs, используйте метод bitxor.

thisWeekMtgs = bitxor(allMtgs,NetDocEnum.MyDays.Wednesday)
thisWeekMtgs = 
Monday, Friday

Используя поразрядный метод, такой как bitxor на allMtgs не изменяет значение allMtgs. Этот пример создает переменную, thisWeekMtgs, который содержит результат операции.

Заменяя флаг в переменной

Предположим, что вы изменяете обсуждение в команде постоянно от Wednesday до Thursday. Чтобы удалить Wednesday, используйте bitxor и используйте bitor, чтобы добавить Thursday. Поскольку это - постоянное изменение, обновите переменные allMtgs и teamMtgs.

teamMtgs = bitor(...
    (bitand(teamMtgs,...
        bitnot(NetDocEnum.MyDays.Wednesday))),...
    NetDocEnum.MyDays.Thursday);
allMtgs = bitor(teamMtgs,...
    NetDocEnum.MyDays.Monday);
teamMtgs
allMtgs
teamMtgs = 
Thursday, Friday

allMtgs = 
Monday, Thursday, Friday

Тестирование на членство

Создайте следующую функцию RemindMe:

function RemindMe(day)
% day = NetDocEnum.MyDays enumeration
teamMtgs = bitor(...
    NetDocEnum.MyDays.Friday,...
    NetDocEnum.MyDays.Wednesday);
allMtgs = bitor(teamMtgs,...
    NetDocEnum.MyDays.Monday);

if eq(day,bitand(day,teamMtgs))
    disp('Team meeting today.')
elseif eq(day,bitand(day,allMtgs))
    disp('Meeting today.')    
else
    disp('No meetings today!')
end
end

Используйте функцию RemindMe:

today = NetDocEnum.MyDays.Monday;
RemindMe(today)
Meeting today.

Смотрите также

| | |

Похожие темы

Была ли эта тема полезной?