Răspuns :
Hai ca i-am dat de cap.
N-am zis eu bine in threadul anterior.
Ca sa iti explic mai bine este bine sa stii ca valorile variabilelor pot fi vazute si in baza 2.
De exemplu avem numarul 14
In baza 2 el are valoarea 01110.
Operatorul & defapt este AND logic, adica ia bitii variabilelor si aplica logica AND pe ei.
Adica sa zicem ca avem 14 & 7
01110
00111
Ca sa facem AND intre cele 2 numere, luam fiecare bit de pe pozitia respectiva si facem AND pe bitul din cel de-al doilea numar, de pe aceeasi pozitie.
Logica AND este asa:
0 AND 0 = 0
1 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1
14 & 7 ar veni asa
00110
Deci rezultatul are 1 doar atunci cand este 1 in aceeasi pozitie de pe aceeasi variabila.
Si acel if (!(i&(i-1)) urmareste urmatoarea logica
For-ul se incrementeaza mereu iar if-ul se executa doar atunci cand gaseste o putere de-a lui 2
Sa ii dam lui i o valoare, putere de-a lui 2, 16 de exemplu
16 in binar este 10000
i-1 este 15 in acest caz, 01111
Si se face AND intre aceste 2 numere
10000
01111
Rezultatul este 00000 (zero, fals)
Avem negat in fata deci !(00000) = 1 adevarat si se executa if-ul
Este destul de avansata chestia, daca ai reusit sa intelegi esti tare
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!