2011-01-12 20 views
65

Estoy tratando de establecer bits en la variable de bytes Java. Proporciona métodos propios como .setBit(i). ¿Alguien sabe cómo puedo darme cuenta de esto?Establecer bit específico en el byte

puedo iterar bit a bit a través de un byte determinado:

if((my_byte & (1 << i)) == 0){ 

} 

sin embargo no puedo fijar esta posición a 1 o 0, ¿verdad?

Respuesta

109

Utilice el bit a bit or y and operadores. Para establecer un bit:

my_byte = my_byte | (1 << pos); 

Para anular establecer un bit:

my_byte = my_byte & ~(1 << pos); 
+3

ver también el operador xor - es la tercera herramienta de poder en ese arsenal (ver el artículo de Wikipedia sobre el enmascaramiento). – Hardryv

59

para establecer un bit:

myByte |= 1 << bit; 

para desactivarla:

myByte &= ~(1 << bit); 
+0

¿Qué quiere decir esto que "ajustar" un poco? Digamos que estabas tratando de acceder al 0º bit, y myByte contiene 11101101. ¿Qué significa esto? ¿Cómo controlo el valor que se establece? – Michael

+3

@Michael: Establecer un poco significa hacerlo 1. Limpiar un bit significa hacerlo 0. –

10

La técnica que necesita es aislar el bit elegido y ajusta o desactivarla. Ya tienes la expresión para aislar el bit ya que estás usando eso para probarlo más arriba. Puede establecer el bit ORing it in, o borrar el bit por bit Y con el complemento de 1 del bit.

boolean setBit; 
my_byte = setBit 
      ? myByte | (1 << i) 
      : myByte & ~(1 << i); 
19

Sólo para complementar Jon‘s answer y driis‘ answer

Para alternar (invertido) un poco

myByte ^= 1 << bit; 
+0

esto es más limpio que dos operaciones separadas ... – ernesto

+1

@ernesto pero no responde específicamente a la pregunta. Él preguntó cómo configurar el bit, no alternarlo. Hay una diferencia. Por supuesto, podría verificar el bit primero, luego alternarlo si fuera necesario, pero también serían 2 tareas separadas ... –

6

Consulte la clase java.util.BitSet que hace el trabajo por usted.

Para establecer: myByte.set(bit); Para restablecer: myByte.clear(bit); Para rellenar con un bool: myByte.set(bit, b); Para obtener el bool: b = myByte.get(bit); Obtener el mapa de bits: byte bitMap = myByte.toByteArray()[0];

+2

Cuidado con el conjunto de bits. No hay ninguna distinción entre establecer un bit en 0 y borrarlo, por lo tanto 'length()' no contendría esos bits establecidos en 0 –

Cuestiones relacionadas