C - z desiatkovej do dvojkovej sústavy

Programovacie jazyky, rady, poradňa...
fraqer
Expert
Expert
Používateľov profilový obrázok
Príspevky: 182
Registrovaný: 21 apr 2012, 15:47
Bydlisko: NM

C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa fraqer »

Zdravím, nevysvetlil by mi niekto ako fungujú následovné kódy? Už dlho na to pozerám a nemôžem prísť na to ako to vlastne funguje. Skúsil som si to aj na papier prepočítať a vôbec mi to nevychádza. Ďakujem

Kód: Vybrať všetko

int decimal_binary(int n)
{
 int rem, i = 1, bin = 0;
  while( n != 0)
  {
    rem = n%2;
	n /= 2;
	bin += rem * i;
	i*= 10;
  }
   return bin;
}

Kód: Vybrať všetko

int binary_decimal(int n)
{
 int decimal = 0, i = 0, rem;
  while (n != 0)
  {
    rem = n%10;
	n/= 10;
	decimal += rem*pow(2,i);
	++i;
  }
    return decimal;
}
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa pcsiete »

Dobre, ako kódy sú to bludy. Neprevádzajú z jednej sústavy do druhej, lebo v tom prípade by sa nemenila hodnota čísla, čo sa ona teraz mení. Nevykonávajú ani nejakú mne známu zmysluplnú činnosť, čiže jediné čo ti o nich viem povedať je ich správanie.

Prvý kód sa pokúša asi o niečo takéto:
Napíšeš si na papier nejaké číslo v desiatkovej sústave. To číslo zmeníš do dvojkovej sústavy. Potom zabudneš, že je to dvojková sústava, a namiesto toho ho berieš, ako keby bolo v desiatkovej. Teda

Kód: Vybrať všetko

n = 77
77 (v desiatkovej) = 01001101 (v dvojkovej)
vráť 1001101 (v desiatkovej) //1 milión 1 tisíc 1 sto 1 jeden

n = 128
129 (v desiatkovej) = 10000001 (dvojkovej)
vráť 10000001 (v desiatkovej) //10 miliónov 1 jeden
Druhý kód je o niečo viac nezmyselnejší. Je to presný opak.
Napíšeš si na papier nejaké číslo v desiatkovej sústave. Zabudneš, že to číslo je v desiatkovej sústave, a berieš ho, ako keby bolo v dvojkovej. Teda

Kód: Vybrať všetko

n = 911
911 (v dvojkovej) = 9*4 + 1*2 + 1*1 (v desiatkovej)
vráť 39 (v desiatkovej)

n = 2718
2718 (v dvojkovej) = 2*8 + 7*4 + 1*2 + 8*1
vráť 54

n = 31415
31415 (v dvojkovej) = 3*16 + 1*8 + 4*4 + 1*2 + 5*1 (v desiatkovej)
vráť 79
fraqer
Expert
Expert
Používateľov profilový obrázok
Príspevky: 182
Registrovaný: 21 apr 2012, 15:47
Bydlisko: NM

Re: C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa fraqer »

Aha, takže takto to je. Ten kód bol ako príklad na riešenie prevodu cez funkciu, ale keď píšeš že je zlý, už to riešiť nebudem. Ďakujem :)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa pcsiete »

Ono on nemusí byť zlý. V podobnom duchu sa nesú napr. BCD čísla a pod., ale všetko záleží od toho, čo považuješ za prevod.
Prvý kód by sa napríklad dal použiť ako súčasť konverzie istého formátu veľkých čísel v desiatkovej sústave, a ten druhý znova pri robení súčtov alebo násobení viacerých binárnych čísel naraz.
Všetko môže mať perfektne zmyselné použitie, záleží na tom kde.
fraqer
Expert
Expert
Používateľov profilový obrázok
Príspevky: 182
Registrovaný: 21 apr 2012, 15:47
Bydlisko: NM

Re: C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa fraqer »

Ďakujem za vysvetlenie. Ja to ešte neviem sám posúdiť či je dobrý a načo sa skôr hodí lebo som ešte nováčik takže tak. :)
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C - z desiatkovej do dvojkovej sústavy

Príspevok od používateľa Fabo »

Ono takto, ak to pouzivas na vypis na obrazovku tak v podstate ano, funguje to.

len v principe cislo je cislo. toto co robis tu, meni realnu hodnotu ulozeneho cisla, v pameti, pricom "zdanlivo" pre informovaneho citatela, ktory vie ze ich ma interpretovat inym sposobom, zachova tu ktoru hodnotu.

K tomu co dal pcsiete ako vysvetlenie druhej casti... no, v principe ma pravdu, aj ked samozrejme 911 je v dvojkovej sustave blbost, ako v desiatkovej by si povedal ze cislo 7š3g. Ale, ak opat operator zada cislo v "zdanlivo" dvojkovej sustave, napr. 101 tak pocitac ho natiahne v desiatkovej sustave a "zinterpretuje" ako by ho natiahol v dvojkovej. t.j. in 101, out 5.
Implementacia nie je osetrena, takze realne je mozne pouzit aj "hluposti" typu 911 a interpret ich spracuje.
Napísať odpoveď