|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
C Shift
ciao a tutti chi mi saprebbe spiegare il significato di questa riga di codice:
adc_data = (adc_high << 8) | adc_low dove: adc_high sono 8 bit adc_low sono altri 8 bit adc_data dovrebbe essere di 16 bit dati da adc_high e adc_low << dovrebbe essere l'operatore di shift a sinistra?? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Es. adc_high = 0x12, adc_low = 0x34 ---> 0x1200 | 0x34 ---> adc_data = 0x1234.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
ma perchè viene usato l'operatore di or(fa la somma dei bit) |
|
|
|
|
|
|
#4 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Ad esempio 5|7 è uguale a 7, perché in binario 5 si scrive 101 e 7 si scrive 111. Il motivo per cui si usa nel modo che hai visto è che, se a e b sono formati da 8 bit, allora (a<<8)|b contiene una copia di b negli 8 bit meno significativi, e una copia di a negli 8 bit successivi: quindi, puoi "condensare" in una sola variabile il contenuto di altre due.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Si poteva anche scrivere:
adc_data = (adc_high << 8) + adc_low; e sarebbe stata la stessa cosa.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
vediamo se ho capito......se io scrivo ad esempio byte_high=00xF8 (equivalente binario 11111000) byte_low=00x00 (equivalente binario 00000000) byte_data=(byte_high<<8)|byte_low a questo punto byte_data dovrebbe essere formato da 16 bit byte_data=F820(equivalente binario 1111100000100000) |
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
ma l'equivalente binario di 0x1234 è 1001000110100 perchè ci sono due 0 in mezzo? |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
|
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
vediamo se ho capito......se io scrivo ad esempio byte_high=00xF8 (equivalente binario 11111000) byte_low=00x00 (equivalente binario 00000000) byte_data=(byte_high<<8)|byte_low a questo punto byte_data dovrebbe essere formato da 16 bit byte_data=F820(equivalente binario 1111100000100000) |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#14 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
il mio risultato dev'essere contenuto in un registro di 16 bit,ma posso trasmettere un byte alla volta. supponendo che io voglio che il risultato a 16 bit di byte_data=00xF800(equivalente binario 1111100000000000) come devono essere byte_high e byte_low? |
|
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Riassumendo: per comporre i 16 bit data = (byte_high << 8) | byte_low; per scomporre i 16 bit byte_high = data >> 8; byte_low = data & 0xFF;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
allora il codice sarà byte_high=0xF8 byte_low=0x00 byte_data=(byte_high<<8)|byte_low =>byte_data=0xF800 ? |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#18 | |
|
Member
Iscritto dal: Mar 2004
Messaggi: 155
|
Quote:
grazie per la tua infinita pazienza |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:21.



















