bitlvl
IT

Calcolatore di maschere di bit

Inserisci posizioni di bit per costruire una maschera, o incolla una maschera per vedere i suoi bit. Clicca i bit nel registro per cambiarli. Dai un nome ai bit e lo strumento scrive le costanti per te.

Larghezza

Flag con nome

Dai un nome ai bit impostati e ottieni costanti nel tuo linguaggio. Lascia un nome vuoto per saltare quel bit.

  

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Cos’è una maschera di bit

Una maschera di bit è un numero usato per il suo schema di bit e non per il suo valore. Ogni posizione di bit rappresenta un’opzione acceso/spento, così un singolo intero può contenere 8, 32 o 64 flag alla volta. I permessi (rwx), le modalità di apertura dei file, i bit di funzionalità della CPU, le maschere di rete e gli insiemi di opzioni di quasi ogni API in C sono maschere di bit.

Il bit n vale 2ⁿ, quindi una maschera con i bit 0, 2 e 7 impostati è 1 + 4 + 128 = 133 = 0x85 = 1000 0101. La costante nel codice si costruisce spostando un 1 nella posizione: 1 << 7.

Usare una maschera

ObiettivoCome
Verificare se un flag è impostato(value & FLAG) != 0
Verificare se più flag sono tutti impostati(value & MASK) == MASK
Impostare un flagvalue |= FLAG
Azzerare un flagvalue &= ~FLAG
Invertire un flagvalue ^= FLAG
Estrarre un campo dai bit 4–7(value >> 4) & 0xF
Costruire una maschera per i bit lo..hi((1 << (hi - lo + 1)) - 1) << lo

Leggere una maschera data

Converti il valore in binario e numera i bit da destra partendo da 0. Ogni 1 è un flag impostato. Lo strumento qui sopra lo fa per qualsiasi valore incolli e mostra le posizioni come lista compatta, ad esempio 0-2, 5, 7.

Esempi

Permessi Unix 0755
bit 0, 2, 3, 5, 6, 7, 8 → 1 1110 1101
Maschera di sottorete /20
i 20 bit alti di 32 impostati → 0xFFFFF000
Nibble basso
bit 0-3 → 0x0F

Domande

Perché le posizioni dei bit partono da 0?

Perché il bit n vale 2ⁿ e 2⁰ = 1 è il bit più a destra. Contare da 0 fa tornare i conti: spostare di n mette un 1 nel bit n.

Qual è la differenza tra maschera di bit e campo di bit?

Una maschera di bit è il numero con cui fai AND o OR. Un campo di bit è un gruppo di bit adiacenti dentro un valore più grande che insieme memorizzano un numero piccolo (per esempio i bit 4–7 con un valore da 0 a 15). Per leggere o scrivere un campo di bit si usano una maschera e uno scorrimento.

Quanti flag stanno in un intero?

Uno per bit: 8 in un byte, 32 in un int a 32 bit, 64 in uno a 64 bit. Se te ne servono di più, usa un array di interi o un tipo bitset dedicato.

Perché 1 << n invece del numero stesso?

Documenta quale bit si intende e non può essere scritto male come un’altra potenza di due. I compilatori lo riducono a una costante, quindi non costa nulla a runtime.

Lo strumento gestisce correttamente le maschere a 64 bit?

Sì. Calcola con interi a precisione arbitraria, quindi tutti i 64 bit sono esatti, compreso il bit 63.