Sul PHP documentation su JSON si parla della parola bitmask. Wikipedia ha definito una maschera. Non capisco né maschera di bit o maschera o come sono utili. Qualcuno può spiegare questi termini usando termini di profano e nessun gergo?Che cos'è una maschera di bit e una maschera?
risposta
È solo un numero, come rappresentato in binario. Ad esempio, supponiamo di avere 8 valori booleani (true
o false
) che voglio archiviare. Potrei memorizzarlo come una matrice di 8 booleani, o potrei memorizzarlo come un singolo byte (8 bit), ognuno dei quali memorizza uno dei booleani (0
= false
, 1
= true
).
A questo punto, posso facilmente manipolare il mio byte in modo che sia possibile (1) impostare bit specifici da attivare o disattivare (vero o falso) e (2) controllare se i bit specifici sono accesi o spenti.
- Per impostare un bit a 1:
mask = mask | (1 << bitIndex)
- Per impostare un po 'per 0:
mask = mask & ~(1 << bitIndex)
- Per ottenere un po' (per essere in grado di controllare):
(mask & (1 << bitIndex)) != 0
Tutto queste operazioni utilizzano l'operatore di spostamento a sinistra, che sposta i bit dalle posizioni meno significative a quelle più significative.
Bit e byte
In informatica, numeri sono rappresentati internamente in binario. Ciò significa che, quando si utilizza un tipo intero per una variabile, questo verrà internamente rappresentato come una somma di zero e uno.
Come forse saprai, un singolo bit rappresenta uno 0
o uno 1
. Una concatenazione di otto di questi bit rappresenta un byte, ad es. 00000101
, che è il numero 5. Suppongo che tu sappia come i numeri sono rappresentati in binario, in caso contrario, dai un'occhiata a here.
In PHP un numero è (principalmente) lungo 4 byte. Ciò significa che il tuo numero utilizza effettivamente 32 bit della memoria interna. Ma per ragioni di semplicità, in tutta questa risposta userò numeri a 8 bit.
stati Memorizzazione in bit
Ora immaginate che si desidera creare un programma che contiene uno stato, che si basa su più valori che sono uno (true
) o zero (false
). Si potrebbero memorizzare questi valori in diverse variabili, potrebbero essere booleani o interi. Oppure utilizzare una singola variabile intera e utilizzare ogni bit dei suoi 32 bit interni per rappresentare i diversi true e falses.
Un esempio: 00000101
. Qui il primo bit (lettura da destra a sinistra) è vero, che rappresenta la prima variabile. Il 2 ° è falso, che rappresenta la seconda variabile. Il terzo vero. E così via ...
Questo è un modo molto compatto di memorizzare dati e ha molti usi.
Bit Masking
Qui è dove entra in gioco po mascheramento. Sembra complesso, ma in realtà è molto semplice.
Il mascheramento dei bit consente di utilizzare operazioni che funzionano a livello di bit.
- Modifica bit particolare in un byte (s)
- Verificando valori di bit specifici sono presenti o meno.
Effettivamente applica una maschera ad un valore, in cui nel nostro caso il valore è il nostro stato 00000101
e la maschera è di nuovo un numero binario, che indica i bit di interesse.
Eseguendo operazioni binarie sulla maschera e lo stato poteva ottenere quanto segue:
- L'operatore estrae un sottoinsieme dei bit nello stato
- L'operatore OR fissa un sottoinsieme dei bit nello stato
- l'operatore XOR commuta un sottoinsieme dei bit nello stato
Se si vuole impostare un particolare valore true, potremmo farlo utilizzando l'OR opera tor e la seguente maschera di bit:
Mask: 10000000b
Value: 00000101b
---- OR ---------
Result: 10000101b
Oppure si può selezionare un valore particolare da parte dello Stato, utilizzando l'operatore AND:
Mask: 00000100b
Value: 00000101b
---- AND ---------
Result: 00000100b
vi consiglio di prendere qualche sguardo più in profondità e ottenere familiare con il gergo. Un buon inizio può essere il collegamento this.
Goodluck!
- 1. Usando una maschera di bit in C#
- 2. manipolazione Bit in C# utilizzando una maschera
- 3. Nome per una maschera di bit con set 1 bit
- 4. Come si disattiva un bit specifico in una maschera bit?
- 5. OpenCV: inverti una maschera?
- 6. Come genrate una maschera di bit in bianco e nero per una bitmap a 32 bit
- 7. Come implementare una maschera di bit in PHP?
- 8. come convertire un int in una maschera di bit?
- 9. creare una maschera di bit il permesso in Java
- 10. PHP debug_backtrace uso maschera di bit
- 11. Algoritmo per generare la maschera di bit
- 12. Come per avvolgere una funzione che restituisce una maschera di bit in Python
- 13. SQL Server: varbinary o int per memorizzare una maschera bit?
- 14. Come controllo, se la maschera di bit contiene bit?
- 15. Sine CAShapeLayer come una maschera di CALayer
- 16. Aggiunta di una maschera con CALayers
- 17. Android: caricamento di una bitmap maschera alfa
- 18. OpenCV C++ findModalità maschera maschera significato
- 19. Posso creare una maschera di bit da 1 a 64 bit senza condizionale in Java?
- 20. Il modo più veloce per calcolare una maschera di bit X-bit?
- 21. Convenzioni di denominazione dei parametri della maschera di bit?
- 22. Come implementare un input con una maschera
- 23. C# Enums - Controllare bandiere contro una maschera
- 24. Come utilizzare una maschera con QPainter?
- 25. Maschera di modifica WPF
- 26. Utilizzo di una maschera con una soglia adattativa?
- 27. maschera di ritaglio vml
- 28. Bit Utilizzo maschera nel programma di programmazione da Perle
- 29. Maschera password con Logback?
- 30. Dato un elenco e una maschera di bit, come posso restituire i valori agli indici che sono True?
[Questa pagina web (https://www.eskimo.com/~scs/cclass/int/sx4ab.html) potrebbe essere d'aiuto. (Attenzione: si tratta di C, non di PHP, e potrebbe avere un gergo troppo alto: il rapporto di termini di un laico.) –
@SteveSummit leggere molto bene, grazie. – Pochi