Diciamo che ho una variabile int n = 8. Sulla maggior parte delle macchine questo sarà un valore a 32 bit. Come posso ottenere solo gli 8 bit più bassi (byte più basso) di questo in binario? Inoltre, come posso accedere a ciascun bit per scoprire di cosa si tratta? mia domanda riguarda CCome ottengo gli 8 bit inferiori di int?
risposta
unsigned n = 8;
unsigned low8bits = n & 0xFF;
Nota alcune cose:
- Per operazioni bit per bit, sempre utilizzare i
unsigned
tipi - bit possono essere estratti da numeri mediante mascheratura binario con il
&
operatore - Per accedere alla bassa 8 bit la maschera è
0xFF
perché in binario ha i suoi 8 bit bassi attivati e il resto 0 - Gli 8 bit bassi del numero 8 sono ... 8 (si pensi per un momento)
Per accedere a un po 'certa di un numero, dicono che il k
esimo bit:
unsigned n = ...;
unsigned kthbit = (1 << k) & n;
Ora, kthbit
sarà 0 se il k
esimo bit di n
è 0, e qualche numero positivo (2**k
) se il k
esimo bit di n
è 1.
Usa aritmetica bit per mascherare i bassi 8 bit:
unsigned char c = (x & 0xFF);
Per accedere al bit più basso esimo, l'equazione è (x & (1 << n))
(n pari a zero indica il bit meno significativo) . Un risultato pari a zero indica che il bit è chiaro e non zero indica che il bit è impostato.
si può t est se un particolare bit è impostato in un numero utilizzando < < e &, cioè:
if (num & (1<<3)) ...
sarà verificare se il quarto bit è impostata oppure no.
Allo stesso modo, è possibile estrarre semplicemente le basse 8 bit (come un intero) utilizzando & con un numero che ha solo i bassi 8 bit impostati, cioè num & 255
o num & 0xFF
(in esadecimale).
Il modo migliore è utilizzare l'operatore logico di bit & con il valore corretto.
Così, per gli 8 bit inferiori:
n & 0xFF; /* 0xFF == all the lower 8 bits set */
O come regola generale:
n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */
È possibile combinare con l'operatore punta passaggio per ottenere un po 'particolare:
(n & (1<<3))>>3;
/* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */
- 1. Cosa sono i bit inferiori e superiori?
- 2. Ottieni due byte inferiori dalla variabile int
- 3. C - Come verificare se 8 bit sono a 32 bit?
- 4. typecasting implicito in C (conversione a 32 bit senza segno a 8 bit u INT)
- 5. Hash 32 bit int a 16 bit int?
- 6. perché i campi di bit per gli stessi tipi di dati hanno dimensioni inferiori rispetto ai campi di bit per i tipi di dati mix
- 7. Come convertire 8 bit in 16 bit in VHDL?
- 8. Come convertire l'int firmato a 32 bit int a 32 bit senza segno int?
- 9. In C++, come ottengo un indice int di un iteratore?
- 10. Come convertire una BufferedImage a 8 bit?
- 11. Come reinterpretare i bit di un float come int
- 12. Utilizzo di bit con int nella struttura
- 13. Dimensione bit di GHC's Int Type
- 14. 8 bit enum, in C
- 15. memorizzato firmato breve nei 16 bit inferiori di un numero unsigned
- 16. Converti 12 bit int a 16 o 32 bit
- 17. come convertire un int in una maschera di bit?
- 18. Rappresenta un elenco di enum a bit come Int
- 19. Come funziona l'istruzione condizionale con gli operatori bit-wise?
- 20. PHP: Come ottengo gli indici di stringa di un preg_match_all?
- 21. int vs size_t su 64 bit
- 22. Come ottengo i dati bit per bit da un valore intero in C?
- 23. Come creare un unione con un int di 32 bit e quattro tipi di char a 8 bit che si riferiscono ciascuno alla differenza di slice del 32 bit int?
- 24. Codifica trasferimento contenuto 7 bit o 8 bit
- 25. È un Java int sempre 32 bit?
- 26. Come ottengo gli errori di autorizzazione negati dall'operatore glob?
- 27. Come ottengo tutti gli attributi di un modello meno qualche
- 28. Perché Java 8 introdurre * Integer.sum (int a, int b) *
- 29. C# Operazioni bit a bit su cortocircuiti - Perché trasmettere a un int?
- 30. Vettore di doppio bit più veloce a 64 bit rispetto a un vettore di int non firmato a 32 bit?
il primo bit significa '0 °' bit o '1 °' bit? –