Estoy tratando de establecer bits en la variable de bytes de Java. Proporciona métodos apropiados 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, ¿o sí?
Posible duplicado de ¿Cómo configura, borra y alterna un solo bit?
– phuclv
26 de enero de 2019 a las 3:28
@phuclv Esa es una pregunta de C/C++, no una pregunta de Java.
– Mark Rotteveel
26 de enero de 2019 a las 9:41
@MarkRotteveel se usa la misma sintaxis. De hecho, la etiqueta debe cambiarse de nombre a algo como C-like
– phuclv
26 de enero de 2019 a las 9:43
@phuclv El hecho de que use la misma sintaxis no es, en mi opinión, una razón suficiente para cerrar como duplicado.
– Mark Rotteveel
26 de enero de 2019 a las 9:44
dris
Usar bit a bit O (|) y Y (&) operadores. Para configurar un bit, es decir, girar el bit en pos para 1:
vea también el operador xor — es la tercera herramienta poderosa en ese arsenal (vea el artículo de Wikipedia sobre enmascaramiento).
– Hardryv
29 de marzo de 2012 a las 17:35
Guau. esto es en realidad cosas básicas de informática, pero aún así me alucinó, el mundo binario es increíble
– elliotching
5 de noviembre de 2019 a las 5:13
Para poner un poco:
myByte |= 1 << bit;
Para borrarlo:
myByte &= ~(1 << bit);
¿Qué quieres decir con que esto se “establecería” un poco? Digamos que estaba tratando de acceder al bit 0 y myByte contiene 11101101. ¿Qué significa esto? ¿Cómo controlo cuál es el valor que se establece?
– Miguel
6 de marzo de 2016 a las 5:08
@Michael: Establecer un bit significa convertirlo en 1. Borrar un bit significa convertirlo en 0.
– Jon Skeet
6 de marzo de 2016 a las 8:50
usuario85421
Solo para complementar la respuesta de Jon y la respuesta de driis.
Para alternar (invertir) un poco
myByte ^= 1 << bit;
@ernesto pero no responde específicamente a la pregunta. Preguntó cómo configurar el bit, no alternarlo. Hay una diferencia. Por supuesto, puede verificar el bit primero, luego alternarlo si es necesario, pero también serían 2 tareas separadas …
–Justin Smith
27 mayo 2016 a las 22:50
La técnica que necesita es aislar el bit elegido y establecerlo o borrarlo. Ya tiene la expresión para aislar el bit ya que la está usando para probarla arriba. Puede establecer el bit con OR, o borrar el bit con AND bit a bit con el complemento a 1 del bit.
Consulte la clase java.util.BitSet que hace el trabajo por usted.
Para configurar: myByte.set(bit);
Reiniciar : myByte.clear(bit);
Para llenar 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];
Cuidado con el conjunto de bits. No hay distinción entre establecer un bit en 0 y borrarlo, por lo tanto length() no contaría esos bits establecidos en 0
– Alex
13 de octubre de 2015 a las 9:28
Cuidado con el conjunto de bits. No hay distinción entre establecer un bit en 0 y borrarlo, por lo tanto length() no contaría esos bits establecidos en 0
– Alex
13 de octubre de 2015 a las 9:28
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Posible duplicado de ¿Cómo configura, borra y alterna un solo bit?
– phuclv
26 de enero de 2019 a las 3:28
@phuclv Esa es una pregunta de C/C++, no una pregunta de Java.
– Mark Rotteveel
26 de enero de 2019 a las 9:41
@MarkRotteveel se usa la misma sintaxis. De hecho, la etiqueta debe cambiarse de nombre a algo como C-like
– phuclv
26 de enero de 2019 a las 9:43
@phuclv El hecho de que use la misma sintaxis no es, en mi opinión, una razón suficiente para cerrar como duplicado.
– Mark Rotteveel
26 de enero de 2019 a las 9:44