Pogledajte određenu poruku
Staro 29. 10. 2007.   #4
Gruja
Dejan Grujic
Professional
 
Datum učlanjenja: 29.09.2005
Poruke: 380
Hvala: 9
64 "Hvala" u 40 poruka
Gruja is on a distinguished road
Default

Za pocetak bitovi se obicno pisu kao i svi drugi brojevi - tako da je bit sa najmanjom tezinom skroz desno. Tako da i brojanje kreces sa desne strane na levu.

Ovo je manje bitno. Vise je bitno kako da napravis masku i sta da radis sa njom.

Kako napraviti masku? Za tvoj primer, maska bi bila 01110000 (tj. samo sam obrnuo da se broji sa desne strane). Masku pravis tako sto napravis n jedinica na pocetku, a onda ih pomeris za p mesta.

Kako napraviti broj koji ima n jedinica? Gledaj na primerima:
binarno => decimalno
1 => 1
11 => 3
111 => 7
1111 => 15

Formula je:
x = pow(2, p) - 1, gde je pow funkcija za stepenovanje. Zaboravio sam tacno kako se stepenuje u c-u, u principu mozes i u petlji da mnozis.

Sad ti treba da tako dobijeni broj pomeris za n bita. Za to imas operator u C-u, <<, tj.
y = x << n

U ovom trenutku imas masku. Kako nju iskoristiti da obrnes bitove? Treba ti operacija zvana "ekskluzivno ili" (poznato i kao XOR), koja obrce bitove tamo gde je maska 1, a ne dira nista tamo gde je 0. Ako me secanje ne vara, to je operator ^

Znaci rezultat je

z = broj ^ y

Moze ovo i na jos koji nacin, ali mene sad zanima ovo - da li si cuo za ekskluzivno ili? Da li znas osnovne logicke operacije sa bitovima? Zanima me da li ste to radili na faksu ili se pojavilo tek sada sa C-om. I na kom si to faksu?
Gruja je offline   Odgovorite uz citat