Bitovi

1

Bitovi

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Imam problem sa bitovima. Ne idu mi bas najbolje. Ja znam sta su bitovi i ostale stvari, ali ne znam kako da rukujem sa njima. Na primer, kako bih trebao da napravim program koji ce da izmeni redosled bitova(prvi sa poslednjim, drugi sa pretposlednjim...) unutar datog celobrojnog podatka?

Hvala unapred!Very Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 02 Sep 2014 15:25

Nemoj ništa napamet. Uzmi neki jednostavan primer i odradi dekompoziciju. Ovako nešto npr:



Moguće je da može i jedostavnije maskiranjem i šiftovanjem/rotiranjem, ali ovo gore radi ok. Very Happy

Dopuna: 02 Sep 2014 15:46

Da, može dosta jednostavnije i optimalnije sa šiftovanjem/rotiranjem kroz Carry flag. No, sa tim bih uspeo da se izborim na asemblerskom nivou. Na višem novou (C/C++) gotovo nikada nisam koristio šiftovanje.



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

A zasto si prvo koristio 107, a onda posle si dobio 214? I kako bih to trebao da pretvorim u kod i da li moram da koristim shiftovanje i kako?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 02 Sep 2014 16:08

To je primer (dakle, potpuno proizvoljan binarni broj) onoga što treba da uradiš, ali sa 8b brojevima. Pogledaj prvi binarni broj, zameni sve bitove onako kako si rekao da treba i dobijaš drugi broj.

Kako da pretvoriš u kod? Pre svega otvori oči, a zatim razmisli. Wink Napisano je maltene celo telo petlje koju treba da implementiraš, i ono sadrži samo tri linije... Wink

Dopuna: 02 Sep 2014 16:18

Evo jedne zanimljivosti. Very Happy Mislio sam da je 214 = 2*107 ispalo sasvim slučajno. No, uzeo sam sada još par peimera i video da je za sve te primere rešenje ili pomnožiti broj sa dva ili podeliti broj sa dva, a sve u zavisnosti od bita najmanje težine (ostatka pri deljenju sa 2). Proveriću kada stignem, ali mi se čini da to može da bude neko opšte rešenje. Very Happy

Dopuna: 02 Sep 2014 16:30

Mada, već za 1 (0000 0001) ne važi... LOL

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Dobro, nego, da li je bolje da se koristi shiftovanje? I sad cu kad mi bude bio slobodan kompjuter da probam da resum ovaj zadatak.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 02 Sep 2014 16:43

Da. Množenje i deljenje nekog broja sa 2 (ili bilo kojim stepenom dvojke) se višestruko brže izvršava kada se realizuje preko šiftovanja. Pored toga, u CF uvek možeš da izvlačiš po jedan bit koji ćeš da posmatraš. No, kao što rekoh, to je na nivou asemblera (a asemblerski kod vrlo lako možeš da umetneš u C/C++ kod). Ne bih znao kako da radiš sa CF na nivou C/C++ jezika.

Dopuna: 02 Sep 2014 16:49

Da, jedino rešenje da vidiš CF iz C/C++ koda je inline asm kod...

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Uradio sam zadatak, bez shiftovanja, ali sa nizom. Kada sam pretvorio dekadni broj u binarni, onda sam taj binarni broj stavio u niz pa onda zamenio bitove. Kako bi moglo to da se uradi bez upotrebe nizova?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Jesi li pogledao prvu moju poruku i potrudio se bar malo da shvatiš ono sa slike? Kao što rekoh, tamo ti piše baš sve, cela petlja koju treba da napišeš.

Do sada ti je manje više sve servirano, sada je već red da se sam malo više aktiviraš i potrudiš. Wink

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Aha, znaci tako. Trebam da napravim petlju koju ce da taj binarni broj pretvori u dekadni, pa da taj dobijeni broj pomnozim sa dva i onda taj broj pretvorim u binarni, zar ne?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Napisano: 02 Sep 2014 19:54

Ne. Brojevi (i sve ostalo) u računaru svakako jesu u binarnom obliku.

Ono sa množenjem sa 2 batali, nije to, napisao sam odmah ispod. Prati proceduru sa slike i to je to. Imaš tu napisane sve tri linije petlje...

Dopuna: 02 Sep 2014 19:56

Još da pomenem (ono isto što si ti pomenuo), radiš sve sa celobrojnim podacima. Dakle integer.

Ko je trenutno na forumu
 

Ukupno su 695 korisnika na forumu :: 28 registrovanih, 4 sakrivenih i 663 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Apok, babaroga, Ben Roj, bojcistv, ccoogg123, debeli, DPera, draganca, dushan, Excalibur13, hologram, ILGromovnik, kjkszpj, kolle.the.kid, Luka Blažević, Mercury, MiroslavD, naki011, Nemanja.M, nemkea71, nuke92, pavlo, Pohovani_00, repac, S.Palestinac, vathra, vladulns, 79693