Presumendo che ho char "C" il cui codice di ascii è 0110 0111
. Come posso scorrere i suoi bit? Mi piacerebbe costruire un vettore da questi 1 e 0 ....Bit di iterazione di un char
risposta
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);
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
Le operazioni bit per bit sono più veloci e probabilmente la risposta migliore. La soluzione di cui sopra è probabilmente più semplice da leggere. –
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;
}
"I * = 2" può essere cambiato in "i << 1", mi chiedo? –
@Jeff, certo, ma così com'è questa è una risposta decente, corretta e leggibile. Tale pendantry non dovrebbe meritare un downvote. –
Non ho votato. In realtà ho votato e ho inviato una versione srotolata del tuo. Ppl dovrebbe spiegare i voti bassi. –
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.
Questo non mi sembra Java: -/ –
Perdona lo pseudocodice c-like. ;) Non ha senso, o stai solo dicendo che non ho scritto codice sintatticamente corretto? (che ovviamente non intendevo) –
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));
}
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;
- 1. Utilizzo di char array unsigned di stile C e operatori bit a bit in Swift
- 2. avvertimento quando si usa campo di bit con unsigned char
- 3. C/C++ Convertire un intero a 64 bit char matrice
- 4. Stampa di un Char *
- 5. Perché printf applica un char a 8 bit a 32 bit?
- 6. Doppia iterazione di lista
- 7. Iterazione di un ciclo con una pausa
- 8. Ultima iterazione di un ciclo in JavaScript
- 9. Ordine di iterazione di HashSet
- 10. Perché la necessità di un bit "e" per alcune conversioni char in byte in Java?
- 11. Iterazione di un elenco di directory in un Makefile
- 12. Iterazione un WeakHashMap
- 13. LLVM struct matrice iterazione
- 14. Valore massimo di unsigned char
- 15. Tipo di ritorno di operatori bit a bit in C++
- 16. Iterazione veloce di array numpy
- 17. Un mascheramento char * o char ** come FILE *?
- 18. iterazione di mappa in Freemarker
- 19. foreach iterazione generica di NamedNodeMap
- 20. Generazione di un particolare schema di bit utilizzando operatori bit a bit
- 21. Iterazione di oggetti in JsonCpp
- 22. Ricerca di un dicking elegante di Python Iterazione
- 23. iterazione manuale di una riga di un file | bash
- 24. C++: iterazione su un elenco di un tipo generico
- 25. Conversione di un seg [char] per stringa
- 26. inizializzazione di un const char * array static
- 27. Stampa di un char con printf
- 28. Ottenere una sottostringa di un char *
- 29. Esecuzione di bit per bit non su un byte
- 30. Confronto bit a bit Java di un byte
Vorrei andare con (c >> i) e 1 – Jimmy
Accidenti, ragazzi, quando la domanda sembra QUESTO MEGLIO come i compiti a casa, non dare il codice ... Solo una spinta nella giusta direzione! –
Cept dal profilo dell'OP, è abbastanza chiaro che non è uno studente. –