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

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

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

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

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

  • The 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.

См. также

| | |

Похожие темы