Go Down

Topic: Il quiz per ratto (Read 1 time) previous topic - next topic

MauroTec

Cosa fà la seguente bitwise:
Code: [Select]

uint8_t reg = 0;
uint8_t bitValue = 1;
uint8_t nBit = 4;
reg ^= (-bitValue ^ reg) & (1 << nbit)


Qualè il valore do reg dopo la bitwise.

Auguri per la tesi. :)

ciao.

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

lesto

?? come mai questa domanda così diretta in una discussione pubblica?

non faccio commenti sul codice finchè non risponde ratto
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

flz47655

Probabilmente è un modo per distrarlo e rubargli la tesina, così la presenta MauroTec al posto suo :)

ratto93

Di la verità... l'hai fatto apposta per farmi fare una figuraccia :P
allora, non ho mai o quasi mai usato quegli operatori logici, la dico così anche se non sono sicuro e voglio approfondire.
Code: [Select]

uint8_t reg = 0;
uint8_t bitValue = 1;
uint8_t nBit = 4;
reg ^= (-bitValue ^ reg) & (1 << nbit)

Fa un operazione And tra : (-bitValue ^ reg) & (1 << nbit)
Però quel : ^=
non so cosa sia, è una nand ? Sono completamente allo scuro di come funziona questa cosa..

@lesto, non ti preoccupare rispondi tutto tanto in campo sono uno dei più ignoranti  :smiley-red:
@Flz orami il titolo della tesina è depositato in segreteria quindi non corro rischi di alcuna sorta  XD
Se corri veloce come un fulmine, ti schianterai come un tuono.

ratto93

#4
Jun 15, 2012, 03:21 pm Last Edit: Jun 15, 2012, 03:23 pm by ratto93 Reason: 1
Mah no !
ecco :
reg ^= (-bitValue ^ reg) & (1 << nbit)

reg ^   -> mi fà la XOR al risultato prima di assegnarselo
(-bitValue ^ reg)     -> qui fà un altra XOR tra le due variabili
&    ->  AND
(1 << nbit)    -> prende i bit più significativi di nbit e li aggiunge ad 1

E' corretto così ?
Edit :
questa cosa non l'ho mai studiata, credo non la conoscano nemmeno i prof a scuola  :smiley-roll-blue:
ad ogni modo mi sto già documentando anche se proseguirò dopo lo studio ..
Se corri veloce come un fulmine, ti schianterai come un tuono.

flz47655

Studia il pascoli e company anzi che riposare nel forum :)

Madwriter

svevo te lo chiedono sempre attento   :%
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

PaoloP


Qualè il valore do reg dopo la bitwise.


42  :smiley-mr-green:


http://it.wikipedia.org/wiki/La_risposta_alla_domanda_fondamentale_sulla_vita,_l'universo_e_tutto_quanto
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

lesto

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.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

flz47655

Ma non avete proprio niente da fare?  :P :)

lesto

sono al lavoro, quindi tra una compilazione e l'altra, per distrarmi, do un'occhiata al forum. Giusto per staccare un pò  :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

flz47655

Ricompili il sorgente di Linux? Dai scherzo

Ciao

lesto

magari! sto a fare questi programmi:


ps. ricompilare un kernel, ma anche farsi una LFS (Linux From Scratch) non è così difficile, bisogna avere il tempo di starci dietro (un mesetto a tempo perso).
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Madwriter


Ma non avete proprio niente da fare?  :P :)

quandi aspetti che si faccia l'orario per scendere non c'è di meglio che caricare dei condensatori con una batteria e usarli per accendere dei led xD
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

MauroTec

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.

Quote
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 http://graphics.stanford.edu/~seander/bithacks.html#ConditionalSetOrClearBitsWithoutBranching

io ne ho fatto una macro:
Code: [Select]
#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.

Quote
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.


Qualè il valore do reg dopo la bitwise.


42  :smiley-mr-green:


http://it.wikipedia.org/wiki/La_risposta_alla_domanda_fondamentale_sulla_vita,_l'universo_e_tutto_quanto

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.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Go Up