Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razmena vrednosti bitova!

[es] :: C/C++ programiranje :: Razmena vrednosti bitova!

[ Pregleda: 2408 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

osmica
Beograd

Član broj: 38009
Poruke: 74
*.pat-pool.bgd.sbb.co.yu.

Sajt: www.imagenedthe.com


Profil

icon Razmena vrednosti bitova!05.09.2005. u 14:42 - pre 225 meseci
Treba mi pomoc oko bitova,najvise me oni bune!aj ako moze objasnjenje!
Treba da razmenim vrednost bitova na pozicijama i,j promenjive n,a da ne koristim pomocni niz,niti aritmeticke operatore +,-,/,*,%.
Nadam se da ne trazim puno,imao sam par zadataka sa bitovim do sada ispred mene,i ni jedan nisam resio!Ne razumem ni zasto je potrebno razmenjivati vrednost bitova,koja je svrsha tog,gde su bitne operaciaje sa bitovima.Poz hvala puno!
Ivan :)
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Razmena vrednosti bitova!05.09.2005. u 19:45 - pre 225 meseci
Prvo odgovor na posljednje pitanje.
Vidis ja sada radim (skoro pri kraju) na razredu za beskonacne cijelobrojne brojeve.
Da bi se dobio maksimum na brzini svih operacija (+,-,*,/, ...), brojeve predstavljam poljem bajtova na kojem mogu iskoristiti ugradjene operacije +,-,*,/,&,|,~,^ koje su maglovito brze.
Iz ovoga vidis da se uglavnom radi sa bitovima kad se radi sa brojevnim vrijednostima i enkripcijom koja se opet svodi na ovo prijasnje.

Odgovor na prvo pitanje.
Code:
n=27;  // 00011011
i=7;
j=1;


Da bi zamjenio dva bita prvo moras imati masku za pristup to poziciji.
To bi izgledalo ovako:
Code:

maska_i=128;  // 01000000
maska_j=1;     // 00000010

Pristup bitu omogucavas sa bitovnim operatorom &, a namjestanje sa |:
Code:

tmp_i=n&maska_i;
if(n & maska_j)  //ako je izlucen bit na j poziciji 
      n|=maska_i;  // postavlja se bit na i poziciji
if(tmp_i)  //ako je bio izlucen bit na j poziciji 
      n|=maska_j;

Poslagaj ovako bitove pa ce ti biti jasno:
00011011 &
01000000 = 00000000

00011011 &
00000010 = 00000010

itd.

Pozdrav
 
Odgovor na temu

osmica
Beograd

Član broj: 38009
Poruke: 74
*.pat-pool.bgd.sbb.co.yu.

Sajt: www.imagenedthe.com


Profil

icon Re: Razmena vrednosti bitova!06.09.2005. u 13:36 - pre 225 meseci
Hvala,sinoc sam dosta gledao zadatke sa bitovima,i sad ovo tvoje,sad cu probam da uradim sam nekoliko laksi zadataka.Hvala,poz!
Ivan :)
 
Odgovor na temu

dejandj

Član broj: 92
Poruke: 3620
*.rcub.bg.ac.yu.



Profil

icon Re: Razmena vrednosti bitova!06.09.2005. u 16:15 - pre 225 meseci
Pristojno sam siguran da "postavljanje maske" trosi ohohooo...

Osim u slucaju da se ista ponavlja vise od cca 100x stvar je gubljenje vremena jer POSTOJI neki sled u onom sto juris (inace bi stvar "APSOLUTNO" BILA BESMISLENA...). (Nema takvog neceg, APSOLUTNO!).

E, sad...


 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Razmena vrednosti bitova!06.09.2005. u 16:41 - pre 225 meseci
Nisam te razumio... Pojasni.
 
Odgovor na temu

dejandj

Član broj: 92
Poruke: 3620
*.rcub.bg.ac.yu.



Profil

icon Re: Razmena vrednosti bitova!07.09.2005. u 15:31 - pre 225 meseci
Citat:
NrmMyth: Nisam te razumio... Pojasni.


Cela stvar sa zamenom bitova vodi poreklo iz praistorije, kad se to radilo sibicom na prekidacu ili spenadlom, bukvalno!

Ako ti je SAD potrebno takvo nesto (a da nema ono poreklo) to je iz razloga sto masinski kod radi tako nesto bit operacijama veoma, veoma brzo. Samo treba da nahvatas logiku.

Maske, prethodno izracunate tabele i slicno imaju svrhu SAMO kad se cesto ili mnogo koriste u istom programu.

U suprotnom je bolje, brze pa cak i zgodnije isprogramirati stvar u toku (in situ i t. sl.). Taj deo je posao ali se kasnije isplati.

Register varijable su kljucne u ovakvim slucajevima.

 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Razmena vrednosti bitova!07.09.2005. u 18:39 - pre 225 meseci
Citat:
...u toku (in situ i t. sl.)...
???

Koliko sam razumio ti ides u krajnje krajnosti, sa kojima nije potrebno opterecivati pocetnike.
Ali lijepo je vidjeti zustrog optimizera.

[Ovu poruku je menjao NrmMyth dana 07.09.2005. u 19:43 GMT+1]
 
Odgovor na temu

dejandj

Član broj: 92
Poruke: 3620
*.rcub.bg.ac.yu.



Profil

icon Re: Razmena vrednosti bitova!08.09.2005. u 15:11 - pre 225 meseci
Citat:
NrmMyth: ???

Koliko sam razumio ti ides u krajnje krajnosti, sa kojima nije potrebno opterecivati pocetnike.
Ali lijepo je vidjeti zustrog optimizera.

[Ovu poruku je menjao NrmMyth dana 07.09.2005. u 19:43 GMT+1]


Tacan zakljucak!

"Krajnost" je bila zelja za max brzinom. I obavilo posao nekad davno...
(Uzasno optimizovano).

Ali i kod "modernih" tako nesto ne skodi sigurno.

Jedino ako ti bitovi nisu ona cista skola "spenadli", a u tom slucaju stvar je bas besmislena.


 
Odgovor na temu

[es] :: C/C++ programiranje :: Razmena vrednosti bitova!

[ Pregleda: 2408 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.