Флаг (компьютерная техника)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В программировании понятие флаг относится к одному или нескольким битам памяти, используемым для хранения двоичной комбинации или кода, который характеризует состояние некоторого объекта. Флаги обычно входят в определённые структуры данных, такие как записи баз данных, и их значения, как правило, связаны со значением структур данных, частью которых они являются. Во многих случаях двоичное значение флага представляет собой кодированное представление одного из нескольких возможных состояний или статусов объекта. В других случаях двоичные значения флагов могут представлять собой один или несколько атрибутов в битовом поле, зачастую связанных с возможностями или доступом, например, «может быть записано в», или «может быть удалено». Однако флагам могут быть назначены и другие значения. Один из вариантов использования флагов состоит в маркировке для назначения структуры данных к последующей обработке.

Пример использования флагов в языке С(Си):

int f_have_five = 0; // флаг наличия пятёрки в массиве
int i;
int a[10]; // массив из 10 элементов

for (i = 0; i < 10; i++) { 
    a[i] = rand()%10; // инициализация массива случайными значениями от 0 до 9
    if (a[i] == 5) // если в массиве есть цифра 5, устанавливаем флаг в 1
        f_have_five = 1;
}

if (f_have_five) {
    /* выполняем некоторые действия */
}

Иногда выгодно использовать массивы флагов, чтобы отметить некоторые элементы другого массива для последующей работы с ними.

В микропроцессорах и других логических устройствах флаги обычно используются для управления и индикации промежуточного или конечного состояния, а также для характеристики результата различных операций. Микропроцессоры как правило имеют регистр статуса, который состоит из таких флагов, используемых для обозначения различных состояний после операции, например, если произошло арифметическое переполнение. Флаги могут использоваться в управлении последовательностью операций, в частности, в обработке условных команд перехода. Например, по команде je (Jump if Equal, Переход по равенству) в ассемблере X86 произойдёт переход, если был установлен флаг Z (zero, ноль) на предыдущей операции.