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 :)
Zmieniasz mantyse - odpowiednio zmieniasz wykladnik. Zmieniasz wykladnik - zmieniasz mantyse.
tyle to ja sie w miare domyslam :D chodzi mi o jakas bardziej lopatologiczna pomoc :)
pzdr
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.
deus. napisał(a)
Może dlatego, że reprezentacja hex dla liczb zmiennoprzecinkowych generalnie nie ma sensu?
Ma sens, tylko się nie stosuje.
Niby jaki i jak ma to wyglądać? Co najwyżej można wypisać reprezentację binarną w formie hex.
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
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.
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
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
@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...