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

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

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

Перечисление может задать bit flag. Немного флага позволяет вам создать экземпляры перечисления, чтобы сохранить комбинации значений, заданных участниками. Например, файлы и папки имеют атрибуты, такие как Archiveскрытый, и 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. Поскольку это - постоянное изменение, обновите teamMtgs и allMtgs переменные.

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.

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

| | |

Похожие темы