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 bitposa1:my_byte = my_byte | (1 << pos); // longer version, or my_byte |= 1 << pos; // shorthandPara desarmar un poco, o cambiarlo a
0:my_byte = my_byte & ~(1 << pos); // longer version, or my_byte &= ~(1 << pos); // shorthandPara 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