Ho:
- dieci numeri: +1, +2, +4, +8, +16, +32, +64, +128, +256, +512.
- flag == somma di alcuni di questi dieci numeri.
Come determinare che la somma contenga 2 o 32?
Ho:
Come determinare che la somma contenga 2 o 32?
Converti quei numeri in binario:
1₁₀ → 0001₂
2₁₀ → 0010₂
4₁₀ → 0100₂
8₁₀ → 1000₂
Si noti il modello? Ora prendi 7:
7₁₀ → 0111₂
Confrontando semplicemente il valore binario, puoi facilmente vedere che ci sono 1, 2 e 4, ma non 8. Lo stesso vale per qualsiasi altro numero.
Se vuoi sapere come determinare se un numero contiene un flag in un linguaggio di programmazione specifico, leggi le operazioni bit a bit. È come zero o più flag possono essere combinati a un singolo numero, quindi vengono valutati per determinare quali flag sono abilitati.
Se guardi i tuoi numeri potresti vedere che sono la forma di 2 ^ i dove i = 1 ... n; quindi solo un bit viene influenzato sommando questi numeri e non ci sono overflow. Ecco una tabella, per capirlo meglio:
1 is 00000001
2 is 00000010
4 is 00000100
8 os 00001000
Quindi potresti semplicemente usare lo shift di bit e gli operatori 'e' per ottenere gli operandi della somma. Calcoli 1 & num per ottenere il primo bit (meno significativo) (presumo che il tuo numero sia rappresentato da un byte e chiamato num). Se è 1, hai 1 nella tua somma. Sposti il tuo numero di uno a destra. Ora tu e con 1 di nuovo: se il risultato è 1 hai 2 nella tua somma, ecc.
Leggi altre domande sui tag algorithms