infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Sorin Rita din Martie 03, 2011, 17:01:58



Titlul: operatii pe biti
Scris de: Sorin Rita din 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 ?


Titlul: Răspuns: operatii pe biti
Scris de: FMI Romila Remus Arthur din 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)


Titlul: Răspuns: operatii pe biti
Scris de: truenight din Martie 03, 2011, 17:27:35
Pe .campion este un articol (http://campion.edu.ro/arhiva/index.php?page=paper&action=view&id=21) cu operatii pe biti si gasesti acolo ce-ti trebuie, plus niste probleme la sfarsit. Merita citit! Este unul si pe IA (http://infoarena.ro/operatii-pe-biti), dar e posibil sa fie acelasi articol :-k


Titlul: Răspuns: operatii pe biti
Scris de: Paul-Dan Baltescu din 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).