0Pricing
C Academy · Lezione

Maschere di bit e flag

Impostare, azzerare e invertire i bit

Maschere di bit e flag è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.

I bit come flag

Un singolo intero può memorizzare molte impostazioni on/off, una per ogni bit. Ogni bit è un flag.

Questa tecnica è compatta e veloce, ed è comune nei sistemi operativi e nel codice embedded.

#include <stdio.h>

int main(void) {
    unsigned flags = 0;
    printf("Initial flags = %u\n", flags);
    return 0;
}

Definire le maschere

Una maschera è un valore con bit specifici impostati. Definisca ogni flag come una potenza di due, in modo che occupi il proprio bit.

#include <stdio.h>

#define READ  (1u << 0)
#define WRITE (1u << 1)
#define EXEC  (1u << 2)

int main(void) {
    printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
    return 0;
}

Impostare un bit

Per attivare un flag, esegua un OR tra il valore e la maschera: flags |= MASK.

I bit già impostati rimangono tali.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = 0;
    flags |= READ;
    flags |= WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Azzerare un bit

Per disattivare un flag, esegua un AND con la maschera invertita: flags &= ~MASK.

La maschera invertita contiene 0 nel bit interessato e 1 in tutti gli altri.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    flags &= ~WRITE;
    printf("flags = %u\n", flags);
    return 0;
}

Invertire un bit

Per invertire un flag, esegua uno XOR con la maschera: flags ^= MASK.

Se era attivo, viene disattivato, e viceversa.

#include <stdio.h>
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = 0;
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    flags ^= EXEC;
    printf("after toggle: %u\n", flags);
    return 0;
}

Verificare un bit

Per verificare se un flag è attivo, esegua un AND con la maschera e controlli il risultato: flags & MASK è diverso da zero quando il flag è impostato.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ;
    if (flags & READ)  printf("READ is on\n");
    if (flags & WRITE) printf("WRITE is on\n");
    else printf("WRITE is off\n");
    return 0;
}

Impostare più flag

Combini le maschere con OR per impostare più flag contemporaneamente.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | WRITE | EXEC;
    printf("all set: %u\n", flags);
    return 0;
}

Verificare più flag contemporaneamente

Per verificare che siano impostati tutti i flag di un gruppo, esegua un AND con la maschera combinata e confronti il risultato con la maschera stessa.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)

int main(void) {
    unsigned flags = READ | WRITE;
    unsigned need = READ | WRITE;
    if ((flags & need) == need) printf("both present\n");
    return 0;
}

Stampare i flag attivi

Scorra le maschere in un ciclo per indicare quali flag sono attualmente attivi.

#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)

int main(void) {
    unsigned flags = READ | EXEC;
    if (flags & READ)  printf("R");
    if (flags & WRITE) printf("W");
    if (flags & EXEC)  printf("X");
    printf("\n");
    return 0;
}

Contare i bit impostati

Per sapere quanti flag sono attivi, conti i bit impostati azzerando ripetutamente il bit impostato meno significativo.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    int count = 0;
    while (v) {
        v &= (v - 1);
        count++;
    }
    printf("set bits = %d\n", count);
    return 0;
}

Enum per i flag

L'utilizzo di un enum mantiene organizzate e leggibili le definizioni dei flag.

#include <stdio.h>

enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };

int main(void) {
    unsigned opts = OPT_A | OPT_C;
    printf("opts = %u\n", opts);
    if (opts & OPT_C) printf("C enabled\n");
    return 0;
}

Verifica rapida

Verifichi la Sua conoscenza di maschere e flag.

Riepilogo

Ha imparato a gestire i flag a livello di bit:

  • Impostare con flags |= MASK.
  • Azzerare con flags &= ~MASK.
  • Invertire con flags ^= MASK.
  • Verificare con flags & MASK.
  • Definire le maschere come potenze di due, spesso tramite macro o enum.

Domande Frequenti

La lezione «Maschere di bit e flag» è gratuita?

Sì — il testo completo di «Maschere di bit e flag» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.

Cosa imparerò in «Maschere di bit e flag»?

Impostare, azzerare e invertire i bit Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C Academy?

Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Maschere di bit e flag»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C Academy?

Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Operatori bit a bit
  2. Shift
  3. Maschere di bit e flag
  4. Trucchi pratici con i bit
← Torna a C Academy