[c++] algorytm zamiany na liczbe hex/oct

0

witam :) dzisiaj spotkalem sie z problemem napisania programu, ktory zamienialby liczbe zmiennoprzecinkowa w systemie dziesietnym na szesnastkowy i osemkowy. oczywiscie jako, ze jestem dosc leniwy chcialem sprobowac zrobic to manipulatorami - bez skutku. czy bylby ktos tak mily i nakierowal mnie jakos na pomysl przekonwertowania takiej liczby ? przypominam, ze nie sa to liczby calkowite, a nawet liczby z 8 miejscami przed "," i 8 miejsc po "," . z gory dzieki za pomoc :)

0

Zmieniasz mantyse - odpowiednio zmieniasz wykladnik. Zmieniasz wykladnik - zmieniasz mantyse.

0

tyle to ja sie w miare domyslam :D chodzi mi o jakas bardziej lopatologiczna pomoc :)

pzdr

0

Może dlatego, że reprezentacja hex dla liczb zmiennoprzecinkowych generalnie nie ma sensu? Zwyczajnie wypisz wszystkie bajty danej liczby i tyle. W formie szesnastkowej przecinka nie uświadczysz.

0
deus. napisał(a)

Może dlatego, że reprezentacja hex dla liczb zmiennoprzecinkowych generalnie nie ma sensu?

Ma sens, tylko się nie stosuje.

0

Niby jaki i jak ma to wyglądać? Co najwyżej można wypisać reprezentację binarną w formie hex.

0

Niby jaki i jak ma to wyglądać?

ma taki sam sens jak wypisywanie w systemie 10. po przecinku zmniejszasz potęgi dalej jakby nigdy nic:

FECD.ABC
F163+E16</sup>2+C161+D16</sup>0+A16(-1)+B16(-2)+C*16</sup>(-13)
gdzie A=10, ..., F=15

0

Fajnie tylko liczby zmiennoprzecinkowe nie są w ten sposób reprezentowane fizycznie. Żeby coś takiego wypisać to najprościej floor z liczby - część całkowita, odejmij to od całej liczby to dostaniesz część ułamkową - lecisz z dzieleniem jak przy normalnym wypisywaniu w systemie dziesiętnym.

0

liczby bez przecinkow mozesz latwo zamieniac np tak:
int x;
scanf("%x",&x);
printf("%o",x);

jesli masz przecinek to wczytujesz jako tekst i rozdzielasz potem na lewa i prawa czesc

int x,y;
char t[20];
char*p=t,*d;
gets(t);
d=strchr(t,'.');
if (d)
 {
  sscanf(t,"%x",&x);
  printf("%o",x);
 } else
 {
  *d=0;
   d++;
   sscanf(p,"%x",&x);
   printf("%o",x);
   sscanf(d,"%x",&x);
   /*obliczenie czesci po przecinku*/   
 }

-- kodu nie sprawdzalem, ani nie kompilowalem, to tylko taka koncepcja na sucho --
wydaje mi sie na pierwszy rzut oka ze te czesc po przecinku mozna policzyc tak, ale nie sprawdzalem czy to wychodzi, a juz pozno jest:

   if (x%2)
     printf("%o4",x/2); else
     printf("%o",x/2);

EDIT:
to ostatnie raczej na pewno ma blad, bo zbyt proste jest i cos mi nie pasuje, ale nie chce mi sie juz myslec o tej porze

0

a po co tak kombinować w c++ ??

cout<<dec<<15; //15 w dziesiętnym
cout<<hex<<15; // 15 w szesnastkowym
cout<<oct<<15; //15 w ósemkowym

0

@krwq, bardzo ciekawe rozwiązanie, ma tylko dwa minusy - może nie działać poprawnie (integer overflow - precyzja liczb się kłania) i operuje na stringach zamiast na liczbach zmiennoprzecinkowych. Do tego przydatność takiej reprezentacji jest nieco wątpliwa...

@kaku, wszystko cacy, ale hex/oct/dec mają wpływ jedynie na liczby całkowite...

1 użytkowników online, w tym zalogowanych: 0, gości: 1