2012-02-20 10 views
30

Se ho un byte, come apparirebbe il metodo per recuperare un bit in una determinata posizione?Come ottenere il valore di un bit in una determinata posizione da un byte?

Ecco quello che ho saputo, e non penso che funzioni.

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

dove ID è il nome del byte sto recupero di informazioni da.

+0

tuo quasi arrivati ​​solo bisogno di mascherare il bit che avete appena spostato da AND con 0x01 – Dampsquid

+0

Possibile duplicato di [Java: Controllo se un po ' è 0 o 1 in un lungo] (https://stackoverflow.com/questions/1092411/java-checking-if-a-bit-is-0-or-1-in-a-long) –

risposta

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

L'ID di spostamento a destra per posizione farà sì che il bit #posizione si trovi nel punto più a destra del numero. Combinandolo con il bit AND & con 1 verrà indicato se il bit è impostato.

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

In realtà, questo è bit a bit e; logico ed è &&. –

+0

@CharlieMartin Grazie per avermelo fatto notare, modifico. –

7

Si vuole fare un po 'di maschera e fare bit a bit e. Questo finirà per sembrare molto vicino a quello che hai - usa shift per impostare il bit appropriato, usa & per fare un op bit.

Così

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

dove pos deve variare tra 0 e 7. Se si dispone il bit meno significativo come "bit 1", allora è necessario il -1 ma io consiglierei contro di essa - che tipo il cambio di posizione è sempre fonte di errori per me.

0

per ottenere il bit n-esimo in interi

return ((num >> (n-1)) & 1); 
Problemi correlati