Numero dato che equivale alla somma di alcuni dei 10 numeri. Come determinare che un dato numero contiene uno dei 10 numeri?

0

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?

    
posta anony_root 02.06.2012 - 18:23
fonte

2 risposte

5

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.

    
risposta data 02.06.2012 - 18:34
fonte
2

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.

    
risposta data 02.06.2012 - 18:38
fonte

Leggi altre domande sui tag