Se avessi saputo come lavora quella bitwise lo avrei scritto senza fare quiz. Io ho provato a fare il calcolo manuale ma il risultato è diverso da quello ottenuto compilando il codice.
mi lascia perplesso il "-bitValue", bitValue è un usingned, qiondi non capisco se comunque viene cambiata la sue rappresentazone in complemento a 2 (quindi cambiando completamente il valore), o se viene castato a int e poi reso in complemento a 2, quindi invertendo semplicemente il segno come ci si aspetta.
Scusa ho fatto un'errore nel scrivere il codice, la versione originale la trovi qui Bit Twiddling Hacks
io ne ho fatto una macro:
#define __bit_set_to(nbit, bitValue, toData) *toData ^= (-bitValue ^ *toData) & (1 << nbit)
Occhio che la macro prende un puntatore per toData, togliere * davanti toData nel caso di una variabile semplice.
Di la verità... l'hai fatto apposta per farmi fare una figuraccia smiley-razz
allora, non ho mai o quasi mai usato quegli operatori logici, la dico così anche se non sono sicuro e voglio approfondire.
Giuro di no, io pensavo che visto la tesi imminente sapevi spiegare come lavora quel codice.
PaoloP:
MauroTec:
Qualè il valore do reg dopo la bitwise.
42
Risposta alla domanda fondamentale sulla vita, l'universo e tutto quanto - Wikipedia
A me risulta 32 nel codice e se al posto di bitValue=1 lo metto a zero ritorna ad essere zero.
In pratica a me serviva ottimizzare codice, e volevo risparmiare una if per impostare o pulire un bit, normalmente dobbiamo fare:
PORTA = 0
PORTA |= 1<<5
PORTA ora vale 32
Se volgiamo pulire il bit 5 impostato prima dobbiamo cambiare operatore ed invertire il risultato di 1<<5:
PORTA &= ~(1<<5)
Invece con quel codice è sempre lo stesso sia per impostare un bit che per pulirlo.
Ciao.