System.EnumМногие языки .NET поддерживают побитовые операции над перечислениями, определенными с помощью System.Flags атрибут. Язык MATLAB ® не имеет эквивалентных операций и поэтому предоставляет методы экземпляра для выполнения побитовых операций над объектом перечисления. Побитовые методы: bitand, bitnot, bitor, и bitxor.
Перечисление может определять флаг бита. Битовый флаг позволяет создавать экземпляры перечисления для хранения комбинаций значений, определенных членами. Например, файлы и папки имеют такие атрибуты, как Archive, Hidden, и ReadOnly. Для данного файла выполните операцию на основе одного или нескольких из этих атрибутов. С помощью побитовых операторов можно создавать и тестировать комбинации.
Для использования побитовых операторов перечисление должно иметь:
Flags атрибут. В версии 4 платформы эти перечисления также имеют HasFlag способ.
Значения, соответствующие степеням 2.
Используйте пример 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.
bitand | bitnot | bitor | bitxor