java - significado - que es un bit byte y palabra
¿Cómo obtener el valor de un bit en una posición determinada desde un byte? (4)
Si tengo un byte, ¿cómo se verá el método para recuperar un bit en una posición determinada?
Esto es lo que sé, y no creo que funcione.
public byte getBit(int position) {
return (byte) (ID >> (position - 1));
}
donde ID
es el nombre del byte del que estoy recuperando información.
En Java, lo siguiente funciona bien:
if (value << ~x < 0) {
// xth bit set
} else {
// xth bit not set
}
value
x
pueden ser int
o long
(y no necesitan ser iguales).
Palabra de advertencia para programadores que no son de Java : la expresión anterior funciona en Java porque en ese lenguaje los operadores de cambio de bit se aplican solo a los 5 (o 6, en caso de long
) los bits más bajos del operando del lado derecho. Esto traduce implícitamente la expresión a value << (~x & 31)
(o value << (~x & 63)
si el value
es long
).
Javascript : también funciona en javascript (como java, solo se aplican los 5 bits más bajos del recuento de turnos). En javascript, cualquier number
es de 32 bits.
Particularmente en C, el recuento de cambio negativo invoca un comportamiento indefinido, por lo que esta prueba no necesariamente funcionará (aunque puede hacerlo, dependiendo de su combinación particular de compilador / procesador).
Quieres hacer una máscara de bits y hacer bitwise y. Eso terminará pareciéndose mucho a lo que tienes: usa shift para establecer el bit apropiado, usa &
para hacer una operación bit a bit.
Asi que
return ((byte)ID) & (0x01 << pos) ;
donde pos
tiene que estar entre 0 y 7. Si tiene el bit menos significativo como "bit 1", entonces necesita su -1
pero recomendaría que no lo haga, ese tipo de cambio de posición siempre es una fuente de errores para yo.
para obtener el enésimo bit en entero
return ((num >> (n-1)) & 1);
public byte getBit(int position)
{
return (ID >> position) & 1;
}
Al desplazar el ID por posición, el bit #position estará en el lugar más alejado a la derecha del número. Combinando eso con el AND a nivel de bit &
con 1 le dirá si el bit está configurado.
position = 2
ID = 5 = 0000 0101 (in binary)
ID >> position = 0000 0001
0000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.