Cómo desarmar un bit específico en un entero

Diga, tengo un número entero como 10101 , me gustaría desarmar el tercer bit para obtener 10001 ; si tengo 10001 , todavía obtendré 10001 ; ¿Cómo puedo lograrlo?

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

Suponiendo que está indexando bits desde la derecha, esto debería funcionar para deshacer un bit en particular en value :

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

Puedes configurar el bit usando un código similar:

 value |= mask; 

donde la mask es como antes (Esto supone que la indexación de bits comienza en 0.)

Para borrar o desarmar un poco

Use el operador AND bit a bit (&) para borrar un bit.

  number &= ~(1 < < x); 

Eso borrará el bit x. Debe invertir la cadena de bits con el operador NOT bit a bit (~), y luego Y.

NOTA: aquí x es la posición del bit que comienza de 0 a LSB.

Si está tratando con litterals, entonces puede simplemente trabajar con los números hexadecimales. Convirtiendo sus patrones de bits a números hexadecimales:

 10101 => 0x15 00100 => 0x04 

Por lo tanto, el siguiente código C establecerá b el resultado que desee.

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

Si quería algo genérico, podría tener una función C (sin la comprobación de rango), como

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

Puede alternar el bit n

resultado = número ^ (1 < < bitIndex)

En C y C ++, utilice el operador AND de bits para formar una máscara AND:

 10101 & 10001 

Funciones de bit a bit .

En Java:

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