Come posso impostare tutti i bit su '1' in un numero binario di dimensione sconosciuta?

StackOverflow https://stackoverflow.com/questions/818535

  •  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.

È stato utile?

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:

  1. Cancella il registro, usando un'istruzione di cancellazione per scopi speciali, o carica immediatamente 0, o xo il registro con se stesso.

  2. 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 <=>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top