Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: operatii pe biti  (Citit de 2287 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
soriyn
Vorbaret
****

Karma: 24
Deconectat Deconectat

Mesaje: 150



Vezi Profilul
« : Martie 03, 2011, 17:01:58 »

Cum as putea sa vad cate aparitii de 1 sunt in reprezentarea binara a unui numar ?
Sau cum pot sa vad daca pe a i-a pozitie e 1 sau 0 ?

Bine, stiu ca as putea sa fac asta trecand numarul in baza 2 si apoi sa parcurg cifrele. Dar nu exista si o metoda mai simpla ?
Memorat
R.A.R
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #1 : Martie 03, 2011, 17:25:54 »

Folosind & :
Cod:
if(nr&(1<<(p-1) ) )
    cout<<"bitul de pe pozitia "<<p<<"este 1";
else     cout<<"bitul de pe pozitia "<<p<<"este 0";

p=pozitia(de la dreapta la stanga,p=1 inseamna ultimul bit al numarului)
Memorat
truenight
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #2 : Martie 03, 2011, 17:27:35 »

Pe .campion este un articol cu operatii pe biti si gasesti acolo ce-ti trebuie, plus niste probleme la sfarsit. Merita citit! Este unul si pe IA, dar e posibil sa fie acelasi articol Think
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #3 : Martie 03, 2011, 23:30:20 »

Poti face asa:

Cod:
int nr = 0;

while (x) {
   x &= (x-1);
   ++nr;
}

Numarul de operatii este proportional cu numarul de biti de 1 ai lui x (ceea ce inseamna ca pe cazul cel mai defavorabil, numarul operatiilor va fi similar cu parcurgerea tuturor bitilor, cum sugereaza Remar mai sus), dar in general merge mai bine. Cheia e sa observi ce se intampla cand faci x & (x-1).
Memorat

Am zis Mr. Green
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines