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

funkcija pretvaranja u binarni broj?? kako

[es] :: C/C++ programiranje :: funkcija pretvaranja u binarni broj?? kako

[ Pregleda: 2850 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon funkcija pretvaranja u binarni broj?? kako05.05.2008. u 21:21 - pre 193 meseci
Treba mi pomoc, radim algoritam extendible hashing. I sada zapeo sam na jednoj funkciji. Treba mi funkcija da pretvori broj (decimalni) u binarni broj pa da uzmem zadnjih onoliko koliko mi treba i te zadnje bitove da ponovo prebacim u decimalni broj.
primjer:

9 = 1001 izimam zadnje 2 cifre to jest 01 i pretvaram u decimalan i to je broj 1

ovo je code koji sam uradio(radi kako treba) i profa nije zadovoljan jer treba sto manje da uzima vremena, mislim da je problem for petlja

int tiefe, je int broj i od njega zavisi koliko cu da uzimam zadnjih cifara od binarnog broja. ako je tiefe=2 onda od 1001 uzimam zadnje dvije cifre tj. 01 i tako dalje ako je
tiefe=1 onda uzimam samo zadnju cifru od 1001 tj uzimam broj 1.

unsigned long int key=keys.hashValue()*2 ovo je funkcija kojom ja dobivam broj koji trebam da pretvorim u binaran pa njegov dio binarnog pretvorim u decimalan

profa je nesto spominjao da bi moglo kao modulo da se radi nisam ga skontao. ako vi poznajete nesto jednostavnije molio bih da mi pomognete
hvala puno...


Code:

     int ContainerImpl::hashf (Key keys) const {    // ovako se zove funkcija koju cu pozvati kasnije negdje u zadatku (da ne buni)
 [b]ovaj dio  pretvara u binaran[/b]
        
              std::vector <bool> t (tiefe);  
              int j=1 ;                      
             unsigned long int key=keys.hashValue()*2;           
                for (int i=tiefe-1;i>=0;--i,++j)
                  t[i]=(key>>j)&1?1:0;              

[b]ovaj ispod dio pretvara u decimalan [/b]          
                  int u=1,o=0;
             for (int i=1;i<tiefe;++i) {
                int j=i;
                if(t[i]) {
                   while (i){
                       u*=2;
                       --i; 
                   }
                 o+=u;
                 i=j;
                 u=1;
             }
          }
     if(t[0]) ++o;   
     return o; 
           }


hvala puno
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p6-15.BVCOM.NET.



+1064 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako05.05.2008. u 23:48 - pre 193 meseci
googlaj malo na stl bitset. Ima sve sto ti treba nema potrebe da se mucis.

Pozzzzzzzzzzzzzz!
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako06.05.2008. u 00:17 - pre 193 meseci
Code:

int GetRightBits(int ANum, int ABits)
{
    int Res = 0;

    for (int i = 0; i < ABits; i++) {
        if (ANum & 1) 
          Res = Res | (1 << i);

        ANum = ANum >> 1;        
    }

    return Res;
}


 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p6-15.BVCOM.NET.



+1064 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako06.05.2008. u 01:08 - pre 193 meseci
Odlicno si provalio da konverzija u vector<bool> nije potrebna
kad racunar ionako sve vec radi u binarnom brojnom sistemu,
samo ne treba petlja, ova funkcija moze jednostavno:

Code:

unsigned GetRightBits(unsigned ANum, unsigned ABits)
{
    return ANum & ((1 << ABits) - 1); 
}


Pozzzzzzzzzzzzzzzzz!
 
Odgovor na temu

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako06.05.2008. u 07:16 - pre 193 meseci
hej cekajte ljudi sta je sta ovde nisam skontao bas moze li malo objasnjenja...
hvala za trud

kako radi ovaj code? sta je ANum a sta Abits???

Code:

unsigned GetRightBits(unsigned ANum, unsigned ABits)
{
return ANum & ((1 << ABits) - 1); 
}





a kako radi ovaj code?

Code:

int GetRightBits(int ANum, int ABits)
{
int Res = 0;

for (int i = 0; i < ABits; i++) {
    if (ANum & 1) 
  Res = Res | (1 << i);

ANum = ANum >> 1;
}

return Res;
}



















 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako06.05.2008. u 22:03 - pre 193 meseci
> samo ne treba petlja, ova funkcija moze jednostavno:
> return ANum & ((1 << ABits) - 1);

Da u pravu si, to je najbolje rešenje. Meni je posle prvog rešenja palo na pamet:
Code:

  return (ANum << (sizeof(unsigned) * 8 - ABits)) >> (sizeof(unsigned) * 8 - ABits);


verovatno bi mi iz treće iteracije palo pravo rešenje na pamet ;)

> hej cekajte ljudi sta je sta ovde nisam skontao bas moze li malo objasnjenja...
> kako radi ovaj code? sta je ANum a sta Abits???

ANum je broj od koga se uzima ABits desnih bitova. Primera radi kao kod tebe 9 i 2.

 
Odgovor na temu

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako07.05.2008. u 08:00 - pre 193 meseci
to sam skontao da je Anum broj a ABit je koji broj uzimamo
ali kako ova linija coda vrsi to pretvaranje ne kontam kako radi ova linija coda?
kako pretvara? i zasto -1
hvala puno
osa
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako07.05.2008. u 10:12 - pre 193 meseci
> ali kako ova linija coda vrsi to pretvaranje ne kontam kako radi ova linija coda?
> kako pretvara? i zasto -1

Najbolje se uči samostalnim otkrivanjem, raščani izraz na delove Temp = 1 << ABits; Temp = Temp - 1; return ANum & Temp. Uzmi digitron (dovoljan je Windows Calc) ili najbolje papir pa gledaj kako izgledaju međurezultati u dekadnom a kako u binarnom. Javi ako ne uspeš sam.
 
Odgovor na temu

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako08.05.2008. u 08:15 - pre 193 meseci
opet ja nista de ti meni ovo obajsni? ne kontam kako moze jedinicu ulijevo da joj uzima bitove i zasto jedinici???
hvala puno
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako08.05.2008. u 14:37 - pre 193 meseci
> opet ja nista de ti meni ovo obajsni? ne kontam kako moze jedinicu ulijevo da joj uzima bitove i zasto jedinici???

Uzmi papir i sve radi u binarnom sistemu, podrazumeva se da znaš šta su <<, >>, &, | i ostali bitwise operatori.

Code:

Neka je ANum = 69 (01000101) a ABits 3;

1 << ABits; 
00000001 << 3
00001000

Temp - 1; 
00001000 - 1
00000111

ANum & Temp
01000101 & 00000111
00000101

 
Odgovor na temu

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako08.05.2008. u 21:09 - pre 193 meseci
sad je sve jasno hvala
 
Odgovor na temu

osmania
Panet

Član broj: 26316
Poruke: 773
*.20.11.vie.surfer.at.



+7 Profil

icon Re: funkcija pretvaranja u binarni broj?? kako10.05.2008. u 06:01 - pre 193 meseci
sad imam jos jedno pitanje

Anum je broj 2 (010) i hocu da mu pretvorim zadnje dviej cifre to jest 10 zelim da pretvorim u decimalan. Eh gledaj sada ako uzmem sa desne strane onda je to 10 i ponovo dobijem broj 2 sto radi ovaj donji program eh sada kako da ga zamijenim pa da uzmem s desna u lijevo pa da 01 pretvorim u decimalan i da dobijem 1.

Jel samo treba zamijeniti umjesto << staviti >> ili???
 
Odgovor na temu

[es] :: C/C++ programiranje :: funkcija pretvaranja u binarni broj?? kako

[ Pregleda: 2850 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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