Много языков.NET поддерживают битовые операции на перечислениях, заданных с атрибутом System.Flags
. Язык MATLAB® не начинает эквивалентные операции, и, поэтому, обеспечивает методы экземпляра для выполнения битовых операций на объекте перечисления. Поразрядными методами является bitand
, bitnot
, bitor
и bitxor
.
Перечисление может задать bit flag. Немного флага позволяет вам создать экземпляры перечисления, чтобы сохранить комбинации значений, заданных участниками. Например, файлы и папки имеют атрибуты, такие как 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