Go Down

Topic: Il quiz per ratto (Read 2381 times) 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.


lestofante

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

non faccio commenti sul codice finchè non risponde ratto
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

tazzo

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.

tazzo

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

lestofante

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.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

tazzo

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

lestofante

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:
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

tazzo

Ricompili il sorgente di Linux? Dai scherzo

Ciao

lestofante

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).
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

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.

Go Up