Il quiz per ratto

Credo che quel "-" sia proprio il complemento a due...usando la formula del tuo #define, cioè

toData ^= (-bitValue ^ toData) & (1 << nbit)

e ponendo per esempio

toData   = B01010101
nbit     = 4

Ottengo, usando bitValue = 0 (quindi voglio settare a 0 il quarto bit della variabile) :

(-00000000 ^ 01010101) & 00010000 = (00000000 ^ 01010101) & 00010000 = 01010101 & 00010000 = 00010000 => toData = toData ^ 00010000 = 01010101 ^ 00010000 = 01000101

Riapplico la formula sul nuovo valore di toData, usando questa volta bitValue = 1 (dovrei riottenere il valore originale)

(-00000001 ^ 01000101) & 00010000 = (11111111 ^ 01000101) & 00010000 = 10111010 & 00010000 = 00010000 => toData = 01000101 ^ 00010000 = 01010101

Nemmeno io riesco ad afferrare la logica che c'è dietro però, è mezz'ora che cerco di capire come funziona :smiley: