2011-01-12 11 views
65

Sto provando a impostare i bit nella variabile di byte Java. Fornisce metodi propper come .setBit(i). Qualcuno sa come posso rendermene conto?Imposta bit specifico nel byte

posso scorrere bit per bit tramite un dato di byte:

if((my_byte & (1 << i)) == 0){ 

} 

Tuttavia non posso impostare questa posizione per 1 o 0, posso?

risposta

109

Utilizzare i bit a bit or e and operatori. Per impostare un po ':

my_byte = my_byte | (1 << pos); 

Per un set un po':

my_byte = my_byte & ~(1 << pos); 
+3

vedere anche l'operatore xor - è il terzo strumento di potere in quell'arsenale (vedi l'articolo di Wikipedia sul mascheramento). – Hardryv

59

Per impostare un po ':

myByte |= 1 << bit; 

per cancellarlo:

myByte &= ~(1 << bit); 
+0

Che cosa vuoi dire questo sarebbe "set" un po '? dì che stavi cercando di accedere al 0 ° bit e myByte contiene 11101101. Che cosa significa? Come posso controllare quale sia il valore impostato? – Michael

+3

@ Michael: Impostare un po 'significa renderlo 1. Cancellare un po' significa renderlo 0. –

10

La tecnica che serve è quello di isolare il bit scelto e sia impostare o cancellarlo. Hai già l'espressione per isolare il bit dal momento che lo stai usando per testarlo sopra. È possibile impostare il bit inserendolo o cancellando il bit per bit AND con il complemento 1 del bit.

boolean setBit; 
my_byte = setBit 
      ? myByte | (1 << i) 
      : myByte & ~(1 << i); 
19

Giusto per completare Jon‘s answer e driis‘ answer

Per passare (invertito) un po '

myByte ^= 1 << bit; 
+0

questo è più pulito di due operazioni separate ... – ernesto

+1

@ernesto ma non risponde in modo specifico alla domanda. Ha chiesto come impostare il bit, non modificarlo. C'è una differenza. Naturalmente, è possibile prima controllare il bit, quindi attivarlo se necessario, ma anche quello sarebbe 2 attività separate ... –

6

Si prega di consultare la classe java.util.BitSet che fa il lavoro per voi.

Per impostare: myByte.set(bit); Per ripristinare: myByte.clear(bit); da riempire con un bool: myByte.set(bit, b); Per ottenere risultati bool: b = myByte.get(bit); Ottenere il bitmap: byte bitMap = myByte.toByteArray()[0];

+2

Attenzione con bitset. Non c'è distinzione tra l'impostazione di un bit a 0 e la cancellazione, quindi 'length()' non conteggia quei bit impostati a 0 –