Come posso impostare tutti i bit su '1' in un numero binario di dimensione sconosciuta?
-
03-07-2019 - |
Domanda
Sto cercando di scrivere una funzione in assembly (ma supponiamo che il linguaggio sia agnostico per la domanda).
Come posso usare gli operatori bit a bit per impostare tutti i bit di un numero passato su 1?
So che posso usare il bit " o " con una maschera con i bit che desidero impostare, ma non so come costruire una maschera basata su un numero binario di dimensione N.
Soluzione
~ (x & amp; 0)
x & amp; 0 si tradurrà sempre in 0 e ~ cambierà tutti i bit su 1s.
Altri suggerimenti
Impostalo su 0, quindi capovolgi tutti i bit su 1 con un bit-NOT.
Scoprirai che nel linguaggio assembly hai devi conoscere la dimensione di un " passato il numero " ;. E nel linguaggio assembly è importante per quale macchina è il linguaggio assembly.
Alla luce di tali informazioni, potresti chiederti
- Come posso impostare un registro intero su tutti 1 bit?
o
- Come posso riempire una regione in memoria con tutti i 1 bit?
Per riempire un registro con tutti i 1 bit, sulla maggior parte delle macchine il modo più efficiente richiede due istruzioni:
-
Cancella il registro, usando un'istruzione di cancellazione per scopi speciali, o carica immediatamente 0, o xo il registro con se stesso.
-
Prendi il complemento bit per bit del registro.
Riempire la memoria con 1 bit richiede quindi 1 o più istruzioni di memorizzazione ...
Troverai molti altri suggerimenti e trucchi per i piccoli nel meraviglioso libro di Hank Warren Hacker's Delight .
Imposta x su 1
Mentre x < numero x = x * 2
Risposta = numero o x - 1.
Il codice presuppone che il tuo input sia chiamato " numero " ;. Dovrebbe funzionare bene per valori positivi. Nota per i valori negativi che sono due completano il tentativo di operazione non ha senso poiché il bit alto sarà sempre uno.
Impostalo su -1
. Questo di solito è rappresentato da tutti i bit che sono 1.
Usa T(~T(0))
.
Dove T
è il nome tipografico (se stiamo parlando di C ++.)
Ciò impedisce alla promozione indesiderata di int
se il tipo è inferiore a <=>.