2012-02-20 37 views
30

Si tengo un byte, ¿cómo se verá el método para recuperar un bit en una determinada posición?¿Cómo obtener el valor de un bit en una posición determinada desde un byte?

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 estoy recuperación de información de.

+0

Su casi no sólo tiene que enmascarar el bit que acaba desplazado por AND con 0x01 – Dampsquid

+0

duplicado posible de [Java: Comprobación de si un poco es 0 o 1 en un largo] (https://stackoverflow.com/questions/1092411/java-checking-if-a-bit-is-0-or-1-in-a-long) –

Respuesta

66
public byte getBit(int position) 
{ 
    return (ID >> position) & 1; 
} 

La ID del desplazamiento a la derecha por posición hará que el bit #position esté en el lugar más alejado a la derecha del número. Combinando eso con el bit Y & 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. 
+0

En realidad, eso es a nivel de bit y; lógico y es &&. –

+0

@CharlieMartin Gracias por señalar eso, voy a editar. –

7

Desea 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.

Así

return ((byte)ID) & (0x01 << pos) ; 

donde pos tiene que oscilar entre 0 y 7. Si tiene el bit menos significativo como "bit 1", entonces usted necesita su -1 pero recomiendo en contra de ella - ese tipo de cambio de posición siempre es una fuente de errores para mí.

0

para obtener el enésimo bit de número entero

return ((num >> (n-1)) & 1); 
Cuestiones relacionadas