2010-03-19 8 views

risposta

11

Si può facilmente scorrere su di loro utilizzando operatori bit a bit:

char c = 'C'; 
for (int i = 0; i < 8; ++i) 
{ 
    // extract the i-th bit 
    int b = ((c & 1<<i) >> i); 
    // b will be 1 if i-th bit is set, 0 otherwise 

    // do whatever you want with b 
} 

è possibile ottimizzare (come suggerito nei commenti):

int b = ((c >> i) & 1); 
+2

Vorrei andare con (c >> i) e 1 – Jimmy

+1

Accidenti, ragazzi, quando la domanda sembra QUESTO MEGLIO come i compiti a casa, non dare il codice ... Solo una spinta nella giusta direzione! –

+1

Cept dal profilo dell'OP, è abbastanza chiaro che non è uno studente. –

2

Un personaggio ha un valore intero. Qualcosa del genere funziona:

int myChar = 42; 
String binstr = Integer.toBinaryString(myChar); 

Il resto lo lascio a voi come un esercizio - ma tutto quello che dovete fare ora è iterate sulla rappresentazione di stringa del valore binario e fare tutto ciò che è stato pianificato sul fare

+1

Le operazioni bit per bit sono più veloci e probabilmente la risposta migliore. La soluzione di cui sopra è probabilmente più semplice da leggere. –

2

Basta usare i controlli bit a bit in ogni posizione che ti interessano. Qualcosa di simile al seguente creerà un array bits che contiene i singoli valori.

char c = 'C'; 
int[] bits = new int[8]; 

int j = 0; 
for(int i = 1; i <= 256; i *= 2){ 
    bits[j++] = (c & i) > 0 ? 1 : 0; 
} 
+0

"I * = 2" può essere cambiato in "i << 1", mi chiedo? –

+1

@Jeff, certo, ma così com'è questa è una risposta decente, corretta e leggibile. Tale pendantry non dovrebbe meritare un downvote. –

+0

Non ho votato. In realtà ho votato e ho inviato una versione srotolata del tuo. Ppl dovrebbe spiegare i voti bassi. –

0

Dovrete fare questo con operazioni bit per bit:

vale a dire:

while (my_char > 0) { 
    if my_char & 1 
    char_vector.push 1 // if the right most bit is 1 
    else 
    char_vector.push 0 // right most bit must be 0 if we fell through to the else 
    my_char = my_char >> 1 // right shift one position 
} 

se necessario, si può riempire il char_vector con i restanti 0s, dopo aver spostamento a destra a zero.

+0

Questo non mi sembra Java: -/ –

+0

Perdona lo pseudocodice c-like. ;) Non ha senso, o stai solo dicendo che non ho scritto codice sintatticamente corretto? (che ovviamente non intendevo) –

0
char c = 'C'; 
Vector<Boolean> vector = new Vector<Boolean>(16); 
for (int i = Character.SIZE-1; i >=0; --i) { 
    int num = c >> i; 
    boolean set = (num & 1) == 1; 
    vector.add(Boolean.valueOf(set)); 
} 
0

ciclo Unrolled:

int[] bits = new int[8] 
bits[0] = (c & 1) > 0 ? 1 : 0; 
bits[1] = (c & 2) > 0 ? 1 : 0; 
bits[2] = (c & 4) > 0 ? 1 : 0; 
bits[3] = (c & 8) > 0 ? 1 : 0; 
bits[4] = (c & 16) > 0 ? 1 : 0; 
bits[5] = (c & 32) > 0 ? 1 : 0; 
bits[6] = (c & 64) > 0 ? 1 : 0; 
bits[7] = (c & 128) > 0 ? 1 : 0;