Come disinserire un bit specifico in un numero intero

Supponiamo, ho un numero intero come 10101 , vorrei disinserire il terzo bit per ottenere 10001 ; se ho 10001 , 10001 comunque 10001 ; come posso ottenerlo?

 unset(int i, int j) int i= 10101 or 10000 int j = 00100 

Supponendo che stai indicizzando i bit da destra, questo dovrebbe funzionare per annullare un particolare bit in value :

 int mask = 1 << bitIndex; value &= ~mask; 

Puoi impostare il bit usando un codice simile:

 value |= mask; 

dove la mask è come prima. (Ciò presuppone che l'indicizzazione dei bit inizi a 0.)

Per cancellare o eliminare un po ‘

Utilizzare l’operatore AND bit per bit (&) per cancellare un bit.

  number &= ~(1 << x); 

Questo cancellerà il bit x. È necessario invertire la stringa di bit con l'operatore NOT bit a bit (~), quindi AND it.

NOTA: qui x è la posizione del bit che inizia da 0 a LSB.

Se hai a che fare con i letterati, allora puoi semplicemente lavorare con i numeri esadecimali. Conversione dei modelli di bit in numeri esadecimali:

 10101 => 0x15 00100 => 0x04 

Quindi il seguente codice C imposterà b sul risultato desiderato.

 int a = 0x15; int b = a & ~( 0x04 ); 

Se volessi qualcosa di generico potresti avere una funzione C (con tutti i controlli di distanza rimossi) come

 int clearBit( int value, int bit ) { // Assume we count bits starting at 1 return value & ~( 1 << (bit -1) ); } 

È ansible alternare l’ennesimo bit

risultato = numero ^ (1 bitIndex)

In C e C ++ si usa l’ operatore bit saggio AND per formare una maschera AND:

 10101 & 10001 

Funzioni bit a bit .

In Java:

 int num = 0b10101; int mask = 1 << bitPosition; System.out.println(Integer.toBinaryString(num)); num &= ~mask; System.out.println(Integer.toBinaryString(num));