Estoy tratando de establecer bits en la variable de bytes de Java. Proporciona métodos adecuados como .setBit(i)
. ¿Alguien sabe cómo puedo darme cuenta de esto?
Puedo iterar bit a bit a través de un byte dado:
if( (my_byte & (1 << i)) == 0 ){
}
Sin embargo, no puedo establecer esta posición en 1 o 0, ¿verdad?
java
byte
bit-manipulation
wishi
fuente
fuente
Respuestas:
Utilice los operadores OR (
|
) y AND (&
) bit a bit . Para establecer un bit, es decir, gire el bitpos
a1
:my_byte = my_byte | (1 << pos); // longer version, or my_byte |= 1 << pos; // shorthand
Para desarmar un poco, o cambiarlo a
0
:my_byte = my_byte & ~(1 << pos); // longer version, or my_byte &= ~(1 << pos); // shorthand
Para ver ejemplos, consulte Operadores avanzados de Java / bit a bit
fuente
Para establecer un poco:
myByte |= 1 << bit;
Para borrarlo:
myByte &= ~(1 << bit);
fuente
Sólo para complementar la respuesta de Jon y respuesta driis'
Para alternar (invertir) un poco
myByte ^= 1 << bit;
fuente
La técnica que necesita es aislar el bit elegido y configurarlo o borrarlo. Ya tiene la expresión para aislar el bit, ya que la está usando para probarla arriba. Puede establecer el bit colocándolo en OR, o borrar el bit a bit a bit y con el complemento a 1 del bit.
boolean setBit; my_byte = setBit ? myByte | (1 << i) : myByte & ~(1 << i);
fuente
Consulte la clase java.util.BitSet que hace el trabajo por usted.
Para configurar:
myByte.set(bit);
Para restablecer:myByte.clear(bit);
Para completar con un bool:myByte.set(bit, b);
Para obtener el bool:b = myByte.get(bit);
Obtenga el mapa de bits:byte bitMap = myByte.toByteArray()[0];
fuente
length()
lo tanto , no contaría esos bits establecidos en 0