Pages: [1] 2   Go Down
Author Topic: Il quiz per ratto  (Read 1317 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cosa fà la seguente bitwise:
Code:
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. smiley

ciao.

Logged

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

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

non faccio commenti sul codice finchè non risponde ratto
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:
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  smiley-lol
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 28
Posts: 5515
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ..
« Last Edit: June 15, 2012, 08:23:34 am by ratto93 » Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Studia il pascoli e company anzi che riposare nel forum smiley
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

svevo te lo chiedono sempre attento   smiley-draw
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non avete proprio niente da fare?  smiley-razz smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2417
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ricompili il sorgente di Linux? Dai scherzo

Ciao
Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non avete proprio niente da fare?  smiley-razz smiley
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
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.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.
Logged

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

Pages: [1] 2   Go Up
Jump to: